使用Laravel中三个表中的数据返回json

时间:2016-12-20 17:21:17

标签: php json laravel laravel-5.3

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

此代码返回包含购物车项目数据和相关产品的JSON。但我也想要返回产品的图片,该图片位于 ProductImages 表中。

在我的模型中 CartItem.php 我有

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

在我的模型中 Product.php 我有

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

但是,如果我这样做

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

我收到错误

  

在模型[App \ CartItem]

上调用未定义的关系[images]

4 个答案:

答案 0 :(得分:6)

您可以尝试:

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

要急切加载嵌套关系,您可以使用" dot"语法。

Docs

答案 1 :(得分:2)

您应该使用with()加载两个表:

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

您可以阅读解释here(请参阅嵌套的预先加载部分)。

答案 2 :(得分:2)

你应该使用嵌套的预先加载函数:

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

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

答案 3 :(得分:0)

就像这样使用

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