所以我有一个Order
,Product
,ProductOption
和OrderProductOption
模型。
Product.php:
public function product_options()
{
return $this->hasMany(ProductOption::class);
}
例如,一个产品可以有多个选项。 Product
“衬衫1”可以具有ProductOption
“ XS”,“ S”,“ M”等。
ProductOption.php:
public function product()
{
return $this->belongsTo(Product::class);
}
public function orders()
{
return $this->belongsToMany(Order::class, 'order_product_option', 'option_id', 'order_id')->withPivot('quantity');
}
Order.php:
public function product_options()
{
return $this->belongsToMany(ProductOption::class, 'order_product_option', 'order_id', 'option_id')->withPivot('quantity');
}
现在,无论何时创建Order
,我都会得到Order
及其ProductOption
关系。但是,我也想检索与Product
有关的ProductOption
。我想我可以说我想得到一个子关系。
如何获取刚刚创建的Order
及其所有关系,包括子关系?
通常,我可以这样做:
return new OrderResource(Order::where('id', $order_id)
->with('product_options', 'product_options.product')
->firstOrFail());
但是在这种情况下,我想返回一个Order
实例,不 OrderRequest array
。
我尝试过:
$order->with('product_options.product')
或者:
$order->with('product_options.product')->get()
但是它们返回一个Builder
实例或一个Collection
实例。
任何帮助将不胜感激!
答案 0 :(得分:1)
您的问题是您试图在已加载的模型上使用with()。您有了所需的模型,只需要load关系。这就是所谓的“延迟加载”。
$order->load('product_options.product')