Return 来自匿名函数的数据
Return data from anonymous function
使用 Maatwebsite
将 Excel 文件上传到数据库。
每一行都有一个 属性 类型,例如 'penthouse' 或 'villa'。
我想收集每一行的每个 属性 类型。
使用以下函数将不起作用:
Excel::filter('chunk')->load($csv->getRealPath())->chunk(250, function ($results) {
DB::table('prices')->truncate();
foreach ($results as $row) {
/**
* @var CellCollection $row
*/
array_push($this->property_types, $row->property_type);
$price = Price::create($row->all());
}
});
在 __construct
函数中定义 $this->property_types
如:
public function __construct()
{
$this->middleware('auth');
$this->property_types = [];
}
这将导致一个空数组。
如 here 所述,定义数组和 using
符号可能会解决问题,尽管这会 return 相同的结果,一个空数组。
$data = [];
Excel::filter('chunk')->load($csv->getRealPath())->chunk(250, function ($results) use (&$data) {
DB::table('prices')->truncate();
foreach ($results as $row) {
/**
* @var CellCollection $row
*/
array_push($data, $row->property_type);
$price = Price::create($row->all());
}
});
如何在匿名函数内定义数据,并在函数外检索数据?
问题是,默认情况下,chunk()
方法将在队列中异步处理您的匿名函数。由于该函数由队列中的工作人员 运行,您将无法同步访问它在调用 chunk()
方法的代码中处理的任何数据。
您可以通过将 false
作为第三个参数传递给 chunk()
方法来阻止使用队列。
Excel::filter('chunk')
->load($csv->getRealPath())
->chunk(250, function ($results) {
/* your code */
}, false);
作为附加说明,您在回调中调用 truncate()
。我不知道这是否是故意的,但这会 运行 在每个处理过的块上 table。
使用 Maatwebsite
将 Excel 文件上传到数据库。
每一行都有一个 属性 类型,例如 'penthouse' 或 'villa'。
我想收集每一行的每个 属性 类型。
使用以下函数将不起作用:
Excel::filter('chunk')->load($csv->getRealPath())->chunk(250, function ($results) {
DB::table('prices')->truncate();
foreach ($results as $row) {
/**
* @var CellCollection $row
*/
array_push($this->property_types, $row->property_type);
$price = Price::create($row->all());
}
});
在 __construct
函数中定义 $this->property_types
如:
public function __construct()
{
$this->middleware('auth');
$this->property_types = [];
}
这将导致一个空数组。
如 here 所述,定义数组和 using
符号可能会解决问题,尽管这会 return 相同的结果,一个空数组。
$data = [];
Excel::filter('chunk')->load($csv->getRealPath())->chunk(250, function ($results) use (&$data) {
DB::table('prices')->truncate();
foreach ($results as $row) {
/**
* @var CellCollection $row
*/
array_push($data, $row->property_type);
$price = Price::create($row->all());
}
});
如何在匿名函数内定义数据,并在函数外检索数据?
问题是,默认情况下,chunk()
方法将在队列中异步处理您的匿名函数。由于该函数由队列中的工作人员 运行,您将无法同步访问它在调用 chunk()
方法的代码中处理的任何数据。
您可以通过将 false
作为第三个参数传递给 chunk()
方法来阻止使用队列。
Excel::filter('chunk')
->load($csv->getRealPath())
->chunk(250, function ($results) {
/* your code */
}, false);
作为附加说明,您在回调中调用 truncate()
。我不知道这是否是故意的,但这会 运行 在每个处理过的块上 table。