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 级联删除

laravel 5.1 Eloquent常见问题

讨论:Laravel Eloquent vs DB 查询追加

Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化

DB::transaction() 可以将 Eloquent 查询作为事务执行吗?