![](/img/trans.png)
[英]PHP access variable from inside an anonymous function callback on the outside?
[英]Using anonymous PHP function as variable in Laravel callback
我在Laravel中运行以下代码以在我的Product
模型上加载各种关系:
$product->load([
'skus' => function($query){
$query->select($this->skuFields)->with([
'uniqueItem' => function($query){
// <----------reuse the code below--------->
$query->with([
'fulfillmentCenterUniqueItems',
'products' => function($query){
$query->select($this->productFields)->with([
'skus' => function($query){
$query->select($this->skuFields);
}
]);
},
'skus' => function($query){
$query->select($this->skuFields);
}
]);
// <----------reuse the code above--------->
}
]);
},
'uniqueItem' => function($query) {
//need to reuse code here
},
]);
从代码的注释中可以看到,有一个地方我想重用一些代码,因此我希望将其放在函数中并重用。
因此,我做了以下工作:
$uniqueItemLoadFunction = function($query)
{
$query->with([
'fulfillmentCenterUniqueItems',
'products' => function($query){
$query->select($this->productFields)->with([
'skus' => function($query){
$query->select($this->skuFields);
}
]);
},
'skus' => function($query){
$query->select($this->skuFields);
}
]);
};
$product->load([
'skus' => function($query) use ($uniqueItemLoadFunction){
$query->select($this->skuFields)->with([
'uniqueItem' => $uniqueItemLoadFunction($query)
]);
},
'uniqueItem' => function($query) {
//need to reuse code here
},
]);
但是,我现在收到BadMethodCallException
:
Call to undefined method Illuminate\\Database\\Query\\Builder::fulfillmentCenterUniqueItems()
以原始方式运行代码时未发生此错误。 这使我认为我没有正确使用匿名函数。 我该如何进行这项工作?
您的方法正确。 但是: uniqueItem
需要一个函数。 但是实际上您正在立即调用该函数,并且仅将重新调整后的值返回给键(在这种情况下为null)。 现在,laravel尝试执行给定的函数时,它将尝试执行null()
,这是不可能的。
长话短说:拆下括号
'uniqueItem' => $uniqueItemLoadFunction
这样,您将函数的引用分配给键,而不是返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.