Laravel 5.1用eloquent删除DB中的重复项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5.1用eloquent删除DB中的重复项相关的知识,希望对你有一定的参考价值。
我想知道如何删除数据库表中的重复条目,并将新副本保留在表中。这是我的表格的样子:
$table->increments('id');
$table->string('text');
$table->string('type');
$table->integer('external_id');
$table->timestamps();
由于我从其他数据库导入,并且我想每天导入一次所有数据,这意味着数据库中已经存在一些现有条目,以及新条目。由于我只需要保留新的条目,我需要删除所有旧条目(重复项和非新条目的唯一条目)。有没有办法在Laravel 5.1中使用Eloquent?我试过这个,但它删除了表中的所有内容:
$deleteDuplicates = DB::table('questions')->select('external_id')->distinct()->delete();
答案
试试这个
$deleteDuplicates = DB::table('questions as n1')
->join('questions as n2', 'n1.id', '>', 'n2.id')
->where('n1.name', '=', 'n2.name')
->delete();
查询可能如下所示:
DELETE n1 FROM questions n1, questions n2 WHERE n1.id > n2.id AND n1.name = n2.name
检查Delete all Duplicate Rows except for One in MySQL?
以上是关于Laravel 5.1用eloquent删除DB中的重复项的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1 Eloquent isFillable() 单元测试中的差异
讨论:Laravel Eloquent vs DB 查询追加