Huligan
Huligan

Reputation: 429

How to join output of models in Laravel?

I have the following code:

$orders = OrderProduct::where(function ($query) use ($request) {

})->with('order_products')->orderBy('status', 'desc')->paginate(50)->toArray();

And order_products function is:

 public function order_products()
    {
        return $this->hasMany("App\Order", "order_id", "order_id");
    }

It gives me output result:

{
        "user_id": "1",
        "created_at": "2016-12-18 14:06:11",
        "status": "2",
        "note": "34535345",
        "order_id": "2",
        "address": "Kiev",
        "courier_id": null,
        "payment_type": "0",
        "order_products": [
          {
            "id": 73,
            "product_id": "1265",
            "amount": "1"
          },
          {
            "id": 74,
            "product_id": "1266",
            "amount": "1"
          }
        ]

I need to join order_products with products_details, that to give title of product for each order like as:

"order_products": [
              {
                "id": 73,
                "product_id": "1265",
                "amount": "1",
                "title": "Product name"
              },
              {
                "id": 74,
                "product_id": "1266",
                "amount": "1",
                "title": "Product name"
              }
            ]

Instead this I get a new model output in response:

"products_details": [
  {}, {}
]

How can I join two with models?

Upvotes: 0

Views: 63

Answers (1)

Bara' ayyash
Bara' ayyash

Reputation: 1935

without joining, just using your first code:

in order_products, override the toArray() method.

function toArray() {
  return [
    id         => $this->id,
    product_id => $this->product_id,
    amount     => $this->amount,
    title      => $this->details->name
  ];
}

wich $this->details->name is the relation between order_products and products_details

Upvotes: 1

Related Questions