Laravel eloquent 块不工作
Laravel eloquent chunk does not work
我在 laravel-5.4 application to use chunk
中尝试了以下方法:
$out = [];
\App\User::chunk(5,function($users) use($out){
foreach($users as $user){
//$out[] = $user;
$out[] = $user->id;
}
});
dd($out);
然而,dd($out)
的输出仍然是空数组。这里有什么问题? $out
在全局范围内!
请看,PHP 中的 use
不仅仅使外部作用域中的变量在函数内可用(类似于 JS 等中的词法作用域)。它复制那个变量的值(和here's more explanation,由于某种原因在官方文档中仍然缺失)。
以use
作为在函数内部传递一些值而不实际将其作为形式参数,函数签名的一部分的意思。
最重要的是,您应该传递数组作为参考:
\App\User::chunk(5,function($users) use(&$out){
foreach($users as $user){
//$out[] = $user;
$out[] = $user->id;
}
});
数组是写入时复制的。当您尝试写入要从父范围导入的数组时,您只是在该范围内创建了一个新数组。
您需要使用对数组的引用。
function ($users) use (&$out) { ... }
我在 laravel-5.4 application to use chunk
中尝试了以下方法:
$out = [];
\App\User::chunk(5,function($users) use($out){
foreach($users as $user){
//$out[] = $user;
$out[] = $user->id;
}
});
dd($out);
然而,dd($out)
的输出仍然是空数组。这里有什么问题? $out
在全局范围内!
请看,PHP 中的 use
不仅仅使外部作用域中的变量在函数内可用(类似于 JS 等中的词法作用域)。它复制那个变量的值(和here's more explanation,由于某种原因在官方文档中仍然缺失)。
以use
作为在函数内部传递一些值而不实际将其作为形式参数,函数签名的一部分的意思。
最重要的是,您应该传递数组作为参考:
\App\User::chunk(5,function($users) use(&$out){
foreach($users as $user){
//$out[] = $user;
$out[] = $user->id;
}
});
数组是写入时复制的。当您尝试写入要从父范围导入的数组时,您只是在该范围内创建了一个新数组。
您需要使用对数组的引用。
function ($users) use (&$out) { ... }