adeab
adeab

Reputation: 229

How to get data from three models that are related to each other in Laravel 5.8

So I have this model Order which has one to many relation with ProductOrder model. And also Product model which has the same one to many relation with ProductOrder model. I can get the PorductOrder data with Product or with Order. Like this:

Order::with('product_orders')->get();

Now this is returning my orders with the associated ProductOrder data. How can I include the Products of each ProductOrder data in this collection?

Upvotes: 0

Views: 56

Answers (2)

damask
damask

Reputation: 555

It sounds like ProductOrder is just a joining table/model, is that right? If that is the case, you should change to a ManyToMany relationship to of the Products model to

public function orders()
{
  return $this->belongsToMany('App\Orders', 'product_order');
}

and the Orders to

public function products()
{
  return $this->belongsToMany('App\Products', 'product_order');
}

Then you can access like

Order::find(1)->products()->get();

Upvotes: 0

Ali
Ali

Reputation: 300

Make changes of function name, field name, model name as per you requirements

Step 1:

In you ProductOrder Model use this function:

public function products()
{
    return $this->hasOne('App\Product',  'id', 'product_id');
}

Step 2:

After this in you query you can use as:

Order::with('product_orders.products')->get();

Upvotes: 1

Related Questions