Dominique Chagas
Dominique Chagas

Reputation: 43

Return json with data from three tables in Laravel

//CartController
$itens = CartItem::where('id_cart', $cart->id)->with('product')->get();
return response()->json($itens);

This code returns a JSON with the data of the cart item and the relative product. But I also want to return the images of the product, which is in the ProductImages table.

In my model CartItem.php I have

 public function product(){
    return $this->belongsTo('App\Product', 'id_product');
}

In my model Product.php I have

  public function images(){
    return $this->hasMany('App\ProductImages', 'id_product');
}

But, if I do

 $itens = CartItem::where('id_cart', $carrinho->id)->with('product')->with('image')->get();

I get the error

Call to undefined relationship [images] on model [App\CartItem]

Upvotes: 4

Views: 1857

Answers (4)

Naresh Suman
Naresh Suman

Reputation: 47

Just use like this

$itens = CartItem::where('id_cart', $carrinho->id)->with('product','images')->get();

Upvotes: 0

Amit Gupta
Amit Gupta

Reputation: 17668

You can try it as:

CartItem::where('id_cart', $carrinho->id)->with('product.images')->get();

To eager load nested relationships, you may use "dot" syntax.

Docs

Upvotes: 6

Sylvain Attoumani
Sylvain Attoumani

Reputation: 1194

you should make use of the nested eager load function:

$books = App\Book::with('author.contacts')->get();

https://laravel.com/docs/5.3/eloquent-relationships#eager-loading

Upvotes: 2

Alexey Mezenin
Alexey Mezenin

Reputation: 163838

You should load two tables by using with():

CartItem::where('id_cart', $cart->id)
        ->with('product', 'product.images')
        ->get();

You can read an explanation here (see Nested Eager Loading section).

Upvotes: 2

Related Questions