【发布时间】:2015-12-18 11:12:27
【问题描述】:
我对 Laravel 的 ORM Eloquent chunk() 方法有疑问。 它错过了一些结果。 这是一个测试查询:
$destinataires = Destinataire::where('statut', '<', 3)
->where('tokenized_at', '<', $date_active)
->chunk($this->chunk, function ($destinataires) {
foreach($destinataires as $destinataire) {
$this->i++;
}
}
echo $this->i;
它给出了 124838 个结果。
但是:
$num_dest = Destinataire::where('statut', '<', 3)
->where('tokenized_at', '<', $date_active)
->count();
echo $num_dest;
给出 249676,因此仅 TWICE 作为第一个代码示例。
我的脚本应该编辑数据库中所有匹配的记录。如果我多次启动它,它每次只分发剩余记录的一半。
我尝试使用 DB::table() 而不是模型。 我尝试添加 ->take(20000) 但似乎没有考虑在内。 我用 ->toSql() 回应了查询,一切似乎都很好(添加 ->take() 参数时添加了 LIMIT 子句)。
有什么建议吗?
【问题讨论】:
-
$this->chunk 输出什么?
-
它是一个整数(即2000),我将它重命名为$chunk_size,它没有帮助。
-
你能看到那个变量的输出或值是什么吗?
-
当然:int(2000)(即使经过几次迭代)
-
@adelinemr 我发现了我的情况的原因,但您的情况可能存在不同的问题。我正在更新循环内的模型,原始查询条件在每次迭代时返回不同的结果。
标签: php laravel laravel-5 eloquent