Php Laravel:在一对多关系上选择Distinct

Php Laravel:在一对多关系上选择Distinct,php,laravel,eloquent,Php,Laravel,Eloquent,所以我的两个模型之间有这种关系 Product.php public function photos() { return $this->hasMany('App\Photo'); } public function product() { return $this->belongsTo('App\Product'); } Photo.php public function photos() { return $this->hasMany('App\

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

Product.php

public function photos()
{
    return $this->hasMany('App\Photo');
}
public function product()
{
    return $this->belongsTo('App\Product');
}
Photo.php

public function photos()
{
    return $this->hasMany('App\Photo');
}
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个相同产品的实例,其中包含不同的照片


我如何才能做到每种产品只有一张照片?非常感谢你

你为什么不以雄辩的方式来做这件事

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

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

您为什么不以有说服力的方式这样做

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

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

在eloquent中,您可以轻松完成此操作

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

在雄辩中,你可以很容易地做到

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