提问者:小点点

只查询一对多关系laravel中的一行


我有一个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,但没有成功。 有什么建议吗?


共1个答案

匿名用户

您可以使用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();

它将获取所有产品,并将图片(其关系)附加到该产品。