我正在努力将旧数据库数据传输到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 不会重置或取消设置。所以它发生了。
如何重置?
谢谢。