Laravel - 从数据库事务关闭中获取变量
Posted
技术标签:
【中文标题】Laravel - 从数据库事务关闭中获取变量【英文标题】:Laravel - Get variable from a DB Transaction Closure 【发布时间】:2015-09-12 14:27:42 【问题描述】:我正在使用 Laravel 5 LAMP 堆栈,并且正在尝试使用数据库事务处理 CSV 导入。代码如下所示:
// Should contain any messages to pass back to the user
$results = [];
// Contains the total records inserted
$total = 0;
DB::transaction(function() use($csv_file, $results, $total)
// Some Code ...
$total++;
$results[] = 'Row 10 has some weird data...';
);
return view('plan.import')
->with('results', $results)
->with('total', $total);
最后,我的记录被导入,但我的 $total 和 $results 仍然是空的,因为它们超出了关闭的范围。我知道它们在函数内部被改变了,因为我已经通过它,看到它们发生了变化。我只是不知道如何让他们退出该交易并将它们归还给用户。有人可以帮忙吗?
【问题讨论】:
【参考方案1】:您可以替换以下行:
DB::transaction(function() use($csv_file, $results, $total)
用这个:
DB::transaction(function() use($csv_file, &$results, &$total)
所以函数内部所做的更改将反映在变量中,因为&
创建了变量的引用(传递变量引用)而不是按值传递它们。检查Passing by Reference手册。
或者,您可以从闭包内部返回变量,例如:
$array = DB::transaction(function() use($csv_file, $results, $total)
// Some Code ...
$total++;
$results[] = 'Row 10 has some weird data...';
return compact('total', 'results');
);
然后像这样使用它:
return view('plan.import')
->with('results', $array['results'])
->with('total', $array['total']);
【讨论】:
太棒了。我什至不知道,但现在效果很好,谢谢! 感谢您展示通过引用传递的正确示例 我认为现在通常避免通过引用传递,所以也许第二种选择是最好的以上是关于Laravel - 从数据库事务关闭中获取变量的主要内容,如果未能解决你的问题,请参考以下文章
如何从具有特定值的变量和数据库中获取数据以将其计入laravel上的图表
在 Laravel 5.1 中传递数据控制器以查看获取未定义的变量
如何从 laravel 5.2 中的网站提取 API? [关闭]
无法在 Controller Laravel belongsToMany 关系中获取正确的数据 - Laravel / Eloquent [关闭]