我有一个products表和一个product_pictures表,其中单个产品可以有许多图片(一对多关系)。 我试图显示所有的产品与它的所有细节(如名称,数量等)和只有一个它的产品图片。 这就是我到目前为止所尝试的。
$products = Product::->join('product_pictures', 'products.product_id', '=', 'product_pictures.product_id')
->select('product_name', 'quantity', 'products.product_id', 'product_picture_id')
->groupBy('products.product_id')
->get();
我也尝试过使用distinction
,但没有成功。 有什么建议吗?
您可以使用with
函数。 它将包括一个模型的关系。 因此,如果您有一个product
模型,您可以查询product
的关系。例如product
->; ProductPicture
。
确保在你的模型中建立了这种关系。 大致是这样的:
产品
型号:
public function pictures()
{
return $this->hasMany('App\ProductPicture', 'product_id', 'id');
}
ProductPicture
型号:
public function product()
{
return $this->belongsTo('App\Product', 'id', 'product_id');
}
带有with
函数的查询如下所示:
$products = Product::with(['pictures' => function($q) {
$q->take(1);
])->get();
它将获取所有产品,并将图片(其关系)附加到该产品。