发布网友 发布时间:2022-04-07 13:11
共4个回答
懂视网 时间:2022-04-07 17:32
下面由Laravel教程栏目给大家介绍使用chunkById方法时请不要进行排序!,希望对需要的朋友有所帮助!使用 chunkById 方法的时候请不要进行排序
最近在做开发任务的时候碰到了个诡异的问题,于是分享给大家
问题说明
由于需要批量处理数据,并且这个数据的量很大,一次全部取出然后执行是不现实的,幸运的是 Laravel 为我们提供了 chunkById 方法来让我们方便的处理。伪代码如下
Student::query() ->where('is_delete', false) ->orderBy('id', 'DESC') ->chunkById(200, function($students) { // 在这里进行逻辑处理 });
咋一眼看上去,并没有什么问题,但是实际执行代码的时候会发现 chunkById 只会执行第一次,第二次以后由于某种原因会停止执行。
查找原因
Laravel 的源码中 chunkById 代码如下
public function chunkById($count, callable $callback, $column = null, $alias = null) { $column = is_null($column) ? $this->getModel()->getKeyName() : $column; $alias = is_null($alias) ? $column : $alias; $lastId = null; do { $clone = clone $this; $results = $clone->forPageAfterId($count, $lastId, $column)->get(); $countResults = $results->count(); if ($countResults == 0) { break; } if ($callback($results) === false) { return false; } $lastId = $results->last()->{$alias}; unset($results); } while ($countResults == $count); return true; }
看起来没什么问题,由于 while 循环是根据 $countResults == $count 来判断的,那么我们 dump 一下这两个变量就会发现, 第一次这两个是一致的,第二次由于数据不一致导致程序停止。
在上面的代码中, $count 是由 $results = $clone->forPageAfterId($count, $lastId, $column)->get(); 来获得的,
继续查看 forPageAfterId 方法
public function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id') { $this->orders = $this->removeExistingOrdersFor($column); if (! is_null($lastId)) { $this->where($column, '>', $lastId); } return $this->orderBy($column, 'asc') ->take($perPage); }
我们可以看到,在这里返回的结果是 orderBy 进行升序排列的, 而我们的原始代码是进行降序排列,就会导致 count 不一致,从而使 chunkById 结束执行。
解决方案
把之前的 orderBy('id', 'desc') 移除即可。
Student::query() ->where('is_delete', false) ->chunkById(200, function($students) { // 在这里进行逻辑处理 });
总结
以后使用 chunkById 或者 chunk 方法的时候不要添加自定义的排序
骚到老,学到老。。。
热心网友 时间:2022-04-07 14:40
一、出组词:
1、出走[chū zǒu]
因故不声张地离开家庭或当地。
2、进出[jìn chū]
进来和出去。
3、出生[chū shēng]
胎儿从母体中分离出来。
4、出现[chū xiàn]
显露出来。
5、出手[chū shǒu]
卖出;货物抛售完毕。
6、出产[chū chǎn]
天然生长或人工生产。
二、不组词:
1、不再[bù zài]
放弃;停止进行。
2、不见[bù jiàn]
不见面。
3、不用[bù yòng]
表示事实上没有必要。
4、不定[bù dìng]
不稳定;不安定。
5、不必[bù bì]
表示事理上或情理上不需要。
热心网友 时间:2022-04-07 15:58
正确拼音为:初:chū步: bù意思为:属于或关于开始阶段的。
初组词;
1,初始,拼音;chū shǐ
释义;汉语词汇,意思是开始。
造句;这可让您在发生重设巨集执行阶段时,自动重新初始化变数和事件处理常式
2,初衷,拼音;chū zhōng
释义;指最初的愿望或心意。
造句;老师的初衷是要我们好好学习,我们要理解他的一片苦心。
3,和好如初,拼音;hé hǎo rú chū
释义;恢复和以前一样和睦的关系。
造句;认识到各自的错误,小明和小伟和好如初了。
4,初恋,拼音;chū liàn
释义;顾名思义是说,人的爱情萌发的最初部分。
造句; 尽管时光要使爱情凋谢,但真正的爱,却永远保持着初恋的热情。
5,初露锋芒,拼音;chū lù fēng máng
释义;刀尖的刃口和尖端,意指人的棱角和锐气。
造句;他才华出众,刚参加工作就初露锋芒。
步组词;
1, 跑步,拼音;pǎo bù
释义;是指陆生动物使用足部移动。
造句;夏天在太阳下跑步真是活遭罪。
2,步兵,拼音;bù bīng
释义;指徒步行军作战的士兵。
造句;不要把坦克编在步兵师内,而要建立包括各兵种的装甲师,以使坦克能更好地发挥作用。
3,七步诗,拼音;qī bù shī
释义;译文对照,煮豆持作羹,漉菽以为汁。
造句;触景生情,我不由得想起了曹操的儿子曹植豆萁相煎的七步诗:“煮豆燃豆萁,豆在釜中泣,本是同根生,相煎何太急。
4,同步,拼音;tóng bù
释义;指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。
造句;道德教育过程的两个组成部分应同步进行。
5,步*,拼音;bù qiāng
释义;是单兵肩射的长管*械。
造句;争吵的时候,男人和女人的区别像是步*和机关*的区别。
热心网友 时间:2022-04-07 17:33
【chu】初始;初衷。【bu】跑步;步兵。
一、【chu】组词介绍
1,初始,拼音;chū shǐ
释义;汉语词汇,意思是开始。
2,初衷,拼音;chū zhōng
释义;指最初的愿望或心意。
3、初终 [ chū zhōng ]
释义:始终。
出处:宋 曾巩 《祭欧阳少师文》:“维公平生,恺悌忠实,内外洞彻,初终若一。”《清史稿·诸王传七论》:“乾乾翼翼,靡间初终。” 李大钊 《青春》:“而宇宙之果否为无尽,当问宇宙之有无初终。
4、初岁 [ chū suì ]
释义:古以腊日为岁终,祭祀送岁。腊日的次日,称为“初岁”。
出处:汉 代以后,沿用 夏 历,以十二月初八为腊日。泛指一年之初。《大戴礼记·夏小正》:“初岁祭耒,始用畼。”《史记·天官书》:“腊明日,人众卒岁,一会饮食,发阳气,故曰初岁。” 三国 魏 曹植 《元会》诗:“初岁元祚,吉日惟良。”《初学记》卷三引 梁元帝 《纂要》:“正月孟春,亦曰……初岁。”
二、【bu】步组词介绍;
1, 跑步,拼音;pǎo bù
释义;是指陆生动物使用足部移动。
2、步骤 [ bù zhòu ]
释义;事情进行的程序:有计划、有~地开展工作。
3、步调 [ bù diào ]
释义;行走时脚步的大小快慢,多比喻进行某种活动的方式、步骤和速度:统一~。~一致。
4、步履 [ bù lǚ ]
行走:~维艰(行走艰难);指脚步:轻盈的~。