Reputation: 43
//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
Reputation: 47
Just use like this
$itens = CartItem::where('id_cart', $carrinho->id)->with('product','images')->get();
Upvotes: 0
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.
Upvotes: 6
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
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