在回调之外获取 Laravel Excel 块结果
Getting Laravel Excel chunk results outside callback
我在回调之外获取 Laravel Excel 块方法的结果时遇到问题。
我试图通过 use
关键字将变量传递给回调来解决这个问题。
在 documentation 的指导下,我尝试了:
$foo = [[1, 2], [3, 4]];
Excel::filter('chunk')->load('file.csv')->chunk(250, function($results) use(&$foo)
{
foreach($results as $row)
{
$foo[] = [$row[0], $row[1]];
var_dump($foo); // [[1, 2], [3, 4], [5, 6]]
}
});
var_dump($foo); // [[1, 2], [3, 4]]
$foo 是通过引用传递的,所以我应该能够在我的回调中修改它。问题是,在最后 var_dump() 中,我的 $foo 具有与开始时相同的值。它仅在回调内部发生变化。
我发现唯一有效的解决方案是将 false 作为第三个参数传递给 chunk() 函数,但这意味着我将无法使用队列。似乎我的回调以某种方式被序列化,我无法通过引用传递我的 $foo。
所以我的问题是:如何让 $results 值在回调之外?
当使用块时,你正在执行沙箱中的每个块,因为块被放在队列中(当没有使用队列驱动程序时,它使用 laravel 同步驱动程序)。这意味着无法通过引用传递变量。
此功能已添加到 2.1.0 以解决性能问题。 chunk() 的第三个参数接受一个布尔值 enable/disable 此功能。
参考:
https://github.com/Maatwebsite/Laravel-Excel/issues/744
我在回调之外获取 Laravel Excel 块方法的结果时遇到问题。
我试图通过 use
关键字将变量传递给回调来解决这个问题。
在 documentation 的指导下,我尝试了:
$foo = [[1, 2], [3, 4]];
Excel::filter('chunk')->load('file.csv')->chunk(250, function($results) use(&$foo)
{
foreach($results as $row)
{
$foo[] = [$row[0], $row[1]];
var_dump($foo); // [[1, 2], [3, 4], [5, 6]]
}
});
var_dump($foo); // [[1, 2], [3, 4]]
$foo 是通过引用传递的,所以我应该能够在我的回调中修改它。问题是,在最后 var_dump() 中,我的 $foo 具有与开始时相同的值。它仅在回调内部发生变化。
我发现唯一有效的解决方案是将 false 作为第三个参数传递给 chunk() 函数,但这意味着我将无法使用队列。似乎我的回调以某种方式被序列化,我无法通过引用传递我的 $foo。
所以我的问题是:如何让 $results 值在回调之外?
当使用块时,你正在执行沙箱中的每个块,因为块被放在队列中(当没有使用队列驱动程序时,它使用 laravel 同步驱动程序)。这意味着无法通过引用传递变量。
此功能已添加到 2.1.0 以解决性能问题。 chunk() 的第三个参数接受一个布尔值 enable/disable 此功能。 参考: https://github.com/Maatwebsite/Laravel-Excel/issues/744