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

所以我有一个Order、Product、ProductOption和OrderProductOption模型。


产品.php:


    public function product_options()

    {

        return $this->hasMany(ProductOption::class);

    }

一个产品可以有多种选择,例如。Product“衬衫 1”可以有ProductOption“XS”、“S”、“M”等。


产品选项.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');

    }

订单.php:


    public function product_options()

    {

        return $this->belongsToMany(ProductOption::class, 'order_product_option', 'order_id', 'option_id')->withPivot('quantity');

    }

现在,每当Order创建 an 时,我都会得到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实例。任何帮助,将不胜感激!


蛊毒传说
浏览 113回答 1
1回答

尚方宝剑之说

您的问题是您尝试在已加载的模型上使用 with() 。您拥有所需的模型,只需加载关系即可。这称为延迟预加载。    $order->load('product_options.product')
打开App,查看更多内容
随时随地看视频慕课网APP