4

コールバックの外で Laravel Excel チャンク メソッドの結果を取得する際に問題があります。use変数をキーワードでコールバックに渡すことで、この問題を解決しようとしました。

私が試したドキュメントに導かれて:

$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 が最初と同じ値を持つことです。コールバック内でのみ変更されています。

機能していることがわかった唯一の解決策は、chunk() 関数の 3 番目の引数として false を渡すことですが、それはキューを使用できないことを意味します。私のコールバックはどういうわけかシリアル化されているようで、参照によって $foo を渡すことができません。

だから私の質問は: $results 値をコールバック外にする方法は?

4

1 に答える 1

1

チャンクを使用する場合、チャンクはキューに置かれるため、サンドボックス化されたすべてのチャンクを実行します (キュードライバーが使用されていない場合、laravel 同期ドライバーが使用されます)。これは、参照によって変数を渡すことができないことを意味します。

この機能は、パフォーマンスの問題に対処するために 2.1.0 に追加されました。chunk() の 3 番目のパラメーターは、この機能を有効/無効にするブール値を受け入れます。参考: https ://github.com/Maatwebsite/Laravel-Excel/issues/744

于 2016-08-29T21:42:14.133 に答える