分批把资料从资料库中拉出来,而非一次全拉。
以订单为例,使用范例如下:
use App\Models\Order;
$num_per_chunk = 500; // 每次拉 500 个
$column_as_id = 'order_id'; // 不给这个参数的话预设是会用主键(primary key)
Order::where('status', '>', 0)->chunkById($num_per_chunk, function($orders){
// 自己比较常遇到需要在搭配 foreach 对每个物件作操作
foreach ($orders as $order) {
// 看要对每笔订单做什麽
}
}, $column_as_id);
那为什麽不直接 get()
再 foreach
就好,还要多这一层?
$orders = Order::where('status', '>', 0)->get();// 直接 get!
if (!is_null($orders)) {
foreach ($orders as $order) {
// 看要对每笔订单做什麽
}
}
最直接的原因是这样会一次把资料都载入记忆体,资料量如果很大,记忆体会不够用。
这两个都是 Laravel 提供的 chunk 的方法,主要差别在於,如果资料捞出来是要更新再写回资料库,而非单纯读取,建议用 chunkById
,不然每一次(chunk)更新後可能会影响下一次的捞取。
下面这个例子就是一边更新一边捞取,无穷回圈。
Post::where('updated_at', '<', now())->chunk(1000, function ($post) {
$post->update('updated_at', now());
});
我们前面几章提到关键字的规划原则,我们都很有共识,关键字是要依据潜在消费者的搜寻需求所拟定出来的。 ...
铁人赛只有30天该高兴还是觉得累 哈哈哈 总之顺利度过了 这次的课程进度走一个没很紧绷 但是也是有顺...
NNI搬到Colab上,环境类似本机。虽然,NNI很容易搬到Colab平台上,但由於Colab并不公...
background 也是速记属性,可由以下属性值组成: background-attachment...
以前我绝对是对哲学避之唯恐不及的 但某一年意外看到「正义 一场思辨之旅」以及「超译 尼采」後 开始...