Я бегу следующий код в Laravel, чтобы загрузить различные отношения на моей Product
модели:Использование анонимной функции PHP как переменная в Laravel обратного вызова
$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()
Эта ошибка не происходит, когда код был запущен оригинальный способ. Это заставляет меня думать, что я неправильно использую анонимную функцию. Как я могу сделать эту работу?
в вашем случае, есть другая ошибка, сообщение saing, что в модели продукта не существует '' выполнение функцииCenterUniqueItems'' –