如何删除Laravel中的重复行

Kar*_*esh 2 php laravel laravel-5.2

我需要在mysql表上删除指定移动号码的重复行.如何使用Laravel查询执行此操作?

noo*_*ftw 6

凭借雄辩:

App\Model::where('mobile_number', '0123456789')->delete();
Run Code Online (Sandbox Code Playgroud)

使用查询生成器:

DB::table('some_table')->where('mobile_number', '0123456789')->delete();
Run Code Online (Sandbox Code Playgroud)

编辑

上面将删除所有带有 的行mobile_number 0123456789。如果您想保留一个,请使用以下命令:

// Get the row you don't want to delete.
$dontDeleteThisRow = App\Model::where('mobile_number', '0123456789')->first();

// Delete all rows except the one we fetched above.
App\Model::where('mobile_number', '0123456789')->where('id', '!=', $dontDeleteThisRow->id)->delete();
Run Code Online (Sandbox Code Playgroud)


cod*_*dge 6

如果要在"名称"列中找到重复值,也可以执行以下操作:

例:

$duplicateRecords = DB::select('name')
              ->selectRaw('count(`name`) as `occurences`')
              ->from('users')
              ->groupBy('name')
              ->having('occurences', '>', 1)
              ->get();
Run Code Online (Sandbox Code Playgroud)

然后,您需要遍历您的集合并删除项目.

foreach($duplicateRecords as $record) {
    $record->delete();
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,这将删除所有行,因此如果您有一行 2 次,那么它将删除两行,最终没有行。确保这正是您想要的! (7认同)
  • 对于那些寻找删除重复项仅留下每个重复项之一的解决方案的人来说: User::whereIn('name', $duplicate->pluck('name'))->each(function ($user) { User: :where('name', $activity->name)->where('id', '!=', $user->id)->delete(); }); (3认同)