雄辩地删除了比预期更多的记录?

时间:2016-06-27 19:29:26

标签: laravel orm eloquent

Post::whereReplyTo($request->input('reply_to'))
        ->orderBy('updated_at', 'desc')
        ->offset(Config::PAGE_SIZE * Config::MAX_PAGES)
        ->take(1024)
        ->delete();

我打算在帖子数达到4时解雇,以便在这种情况下保持最多4个帖子。

问题是它删除了所有帖子,而不仅仅是那些我打算删除的帖子

我变得沮丧,为什么会这样?没有错误,我toSql'd查询没有错,选择部分是正确的,我尝试了,所以为什么删除所有帖子???

2 个答案:

答案 0 :(得分:1)

好吧,如果您的研究是正确的,您仍然可以通过两个步骤来完成:

$delete_posts = Post::select('id')->whereReplyTo($request->input('reply_to'))
        ->orderBy('updated_at', 'desc')
        ->offset(Config::PAGE_SIZE * Config::MAX_PAGES)
        ->take(1024)
        ->get()->toArray();

Post::whereIn('id', $delete_posts)->delete();

答案 1 :(得分:0)

我想我正在做点什么 我在运行删除后附加了一个监听器来记录最后一个查询 结果是:

delete from `a2_posts` where `reply_to` = ? order by `updated_at` desc limit 1024

那么我的抵消在哪里?我google了,我认为你不能使用偏移+删除。

延迟?是的,非常如此。

这就是我更喜欢Mongo的原因。

更有意义。

来源:Mysql delete statement with limit

所以我认为我要做的就是查询,然后迭代,然后删除。

SQL是纯粹的天才,有时我向上帝发誓。

相关问题