如何取消在Laravel块中通过引用变量传递的设置?

时间:2019-05-17 07:15:03

标签: php laravel closures

我正在努力将旧数据库数据传输到laravel中的new-tab,并且正在使用块来克服内存泄漏。但是当我通过use($ var)将外部变量传递给chuck Closure时,它的更新将在块完成后显示出来。但是当我重置该变量或将该变量设置为null时,它将无法更新。显示先前的值。

要取消设置,我在下面使用的参考变量认为:

unset($output);
$output = null;
$output = array();

以上代码未重置$ output

$output = array(
        "exceptional_queries" => array(),
        "total_row" => 0,
        "inserted_row" => 0
    );

// Table 1

$f_package = $con->table('old_table')->orderBy('id');

$f_package->chunk(50, function ($package) use (&$output) {

        $total_data = count($package);
        $output['total_row'] += $total_data;
        foreach ($package as $data) {
            try {
                $insert = [
                    ......
                ];
                //Insert Data
                $result  = DB::table('new_table')->insert($insert);
                if ($result) {
                    $output['inserted_row']++;
                }
            } catch (\Exception $exception) {
                // Catch query exception & store it in array
                if ($exception instanceof Illuminate\Database\QueryException) {
                    $output['exceptional_queries'][] = $exception->getMessage();
                }
            }
        }
    });

   echo "-> $table: ".$output['inserted_row']." row inserted out of ".$output['total_row']." \n";
    if (count($output['exceptional_queries'])) {
        echo "- ".count($output['exceptional_queries'])." row has QueryException! \n";
    }

    unset($output);
    $output = null;
    $output = array(
        "exceptional_queries" => array(),
        "total_row" => 0,
        "inserted_row" => 0
    );

//Table 2

 Repeat above things............

在表2上,其显示例外表1和表2两者。基本上, $ output 不会重置或取消设置。所以它发生了。

如何重置?

谢谢。

0 个答案:

没有答案