我正在尝试编写一个查询,以便能够根据名为 hash
的列查找重复记录,并删除除 5 个最新记录之外的所有记录,我想我可以使用 limit
方法来限制记录数量,但不确定在不执行多个查询的情况下实现此目的的最佳方法。
例如,如果我的 applications
数据库表中有 30 个条目,其中 hash
列是 ABC,那么我想删除25 条记录仅剩 5 条记录。
如果特定哈希
有 6 条记录,那么我只想删除 1 条记录,但如果记录少于 5 条,我不确定如何实现这一点。
我当前获取这些记录并循环删除的查询是:
/**
* Get applications by hash
*/
protected function getDuplicateApplications($hash = '')
{
return Application::where('hash', $hash)
->orderBy('created_at', 'asc')
->limit(5)
->get();
}
我还需要什么?
最佳答案
protected function deleteDuplicateApplications($hash = '', $skip = 5)
{
// First get total count
$totalCount = Application::where('hash', $hash)->count();
// Then skip certain amount and take rest and delete it.
return Application::where('hash', $hash)
->orderBy('created_at', 'desc')
->skip($skip)
->take($totalCount - $skip)
->delete();
}
关于php - Laravel 删除 X 记录(如果有重复项)的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72138672/