laravel 几种批量跑数据的方法

chunk 不能在执行过程中修改查询条件

这个是文档里推荐的,当你在控制台跑 command 时,为了防止一口气查出大量数据吃掉内存,你通过这个来分开跑。其内部不过和分页一样用了 forpage.

常常遇到的问题是,如果你在执行过程里修改了查询条件,肯定会漏掉数据。因为是分页嘛,查下一页的时候本来第一页的数据已经被修改了查不到了,forpage 再去 skip 前面的数据肯定是没处理过的。

foreach cursor 搞不好会有点慢

这个是不会有内存之虞。但是 cursor 是直接使用 pdo 的 cursor 来一条一条执行的。风闻数据太多就会很慢,所以嗯。

chunkById 的执行过程会忽略你的排序

顾名思义就是按 id 的顺序来跑数据了。解决了 chunk 跳过一些数据的问题。可是你虽然不会改id,却有可能执行的过程要遵循一些排序。这时候可以把 id 换成别的列来执行。

似乎应该有个结尾可是不知道该说什么

如此这般。