获取刚创建的模型实例及其所有子关系

时间:2020-07-07 20:39:59

标签: php laravel eloquent

所以我有一个OrderProductProductOptionOrderProductOption模型。

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实例。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您的问题是您试图在已加载的模型上使用with()。您有了所需的模型,只需要load关系。这就是所谓的“延迟加载”。

    $order->load('product_options.product')