Laravel: выберите Distinct для отношений один ко многим - PullRequest
0 голосов
/ 18 апреля 2019

Итак, у меня есть эти отношения между моими двумя моделями

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 экземпляров одного и того же продукта с разными фотографиями.

Как добиться того, чтобы для каждого продукта у меня была только одна фотография?Большое спасибо

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

В красноречивом, вы можете сделать это легко.

Product::with([
    'photos' => function($q){
        $q->take(1);
    }
])->get();
1 голос
/ 18 апреля 2019

Почему вы не делаете это красноречивым способом?

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

При этом будут получены все ваши продукты с их фотографиями, и ни один продукт не будет повторен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...