从数据库中取1w条数据,想用model中的chunk分批功能,该怎么实现

根据帮助文档,简单是实现就是这样,但是take不生效,有使用过chunk的朋友,麻烦指点迷津!

FinanceUser::take(100)->get();
FinanceUser::limit(100)->get();

这样执行的话都可以获得100条数据,但是放在chunk中就不生效了

FinanceUser::take(10000)->chunk(200, function($datas)
        {
            foreach ($datas as $data){
            }
         });

解决了

$num = 0;
FinanceUser::chunk(200, function($datas) use(&$num)
 {
$num ++;
if($num >= 50){
return false;
}
            foreach ($datas as $data){
                        var_dump($data);
            }
 });
JellyBool

这样不知道满足你的要求不:

 $users = FinanceUser::take(100);
     $users->chunk(100,function($datas){
         foreach($datas as $data){
             dump($data->name);
         }
     });
lovezsl2

@JellyBool 这样是解决不了的,要想实现那种功能,估计需要优化chunk方法了

lovezsl2

解决了

$num = 0;
FinanceUser::chunk(200, function($datas) use(&$num)
 {
$num ++;
if($num >= 50){
return false;
}
            foreach ($datas as $data){
                        var_dump($data);
            }
 });
sswowo

if($num >= 50){
return false;
}
这里是什么意思?
@lovezsl2

justtest

这不就是我那天直接在群里告诉你的方法吗。。。。 三天了你才搞定。。。。
而且你这个也仍然不是一次查询 1 w 条,而是每次 200 , 50 次, 这也我觉得合理的做法。

lovezsl2

@sswowo 每批200条,50次执行,达到10000条数据
@justtest 谢谢,可能当时没理解,如果不适用use(&$num)这种方法,外部的变量,在callback内是不能使用了

sswowo

@lovezsl2 喔喔 看明白了