php - Laravel 删除 X 记录(如果有重复项)的有效方法

标签 php laravel query-builder laravel-query-builder

我正在尝试编写一个查询,以便能够根据名为 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/

相关文章:

webserver - Php 邮件转到收件人垃圾邮件/垃圾文件夹

php - 获取 Laravel 中未设置为外键的行的数据

php - 在 php 中检查有效日期不起作用

php - 如何绘制折线区域,即服务覆盖区域,并使用 Google Maps API 和 PHP 检查访问者的地址是否位于该区域内?

laravel - 带参数的Laravel路线

php - Laravel groupBy 列并根据数量列添加总计

c# - 函数参数列表错误 : '=' not recogned

symfony - Simfony2 实体字段类型中从 Doctrine Query 到 QueryBuilder

php - 我无法使用 querybuilder 在存储库中构建特定请求

php图像箭头线需要平滑