Laravel:在一对多关系中选择“不同”

时间:2019-04-18 13:05:02

标签: php laravel eloquent

所以我在两个模型之间有这种关系

Product.php

public function photos()
{
    return $this->hasMany('App\Photo');
}

Photo.php

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

我想做的是每个产品只获得一张照片。这是我的查询

$my_ads = DB::table('products as p')
                    ->join('photos as pic','p.id','=','pic.product_id')
                    ->select(DB::RAW('DISTINCT(pic.product_id)'),'p.*','pic.file_path')
                    ->get();

我在此查询中得到的结果是重复的。如果我的第一个产品有5张照片,则该收藏集中将有5个相同产品的实例具有不同的照片。

如何实现每个产品只能有一张照片的目标?非常感谢

2 个答案:

答案 0 :(得分:1)

您为什么不以口才做这件事?

App\Product::with('photos')->get();

这将检索您所有的产品及其照片,并且不会重复任何产品。

答案 1 :(得分:1)

雄辩的话,您可以轻松做到。

Product::with([
    'photos' => function($q){
        $q->take(1);
    }
])->get();