laravel избежать дублирования при join

94
11 марта 2021, 21:20

Как избежать дублирования данных при join в laravel?

Пример:
2 таблицы: в одной пользователи, в другой картинки.
У каждого пользователя может быть несколько картинок в таблице картинок.

Как в запросе избежать дублирования при join (в запросе выводит все картинки для пользователя дублирую пользователя) и вывести для каждого пользователя одну картинку?

Код:

$data = DB::table('users')
  ->leftJoin('users_image', function($join) {
    $join->on('users_image.name', '=', 'users.name');
  })
  ->select('*')
  ->paginate(5);
Answer 1

Если Вам необходимо выбрать уникальные строки, то есть выборка только не повторяющихся сочетаний "пользователь => картинка", то можно добавить условие distinct():

$data = DB::table('users')
  ->leftJoin('users_image', function($join) {
    $join->on('users_image.name', '=', 'users.name');
  })
  ->distinct()
  ->paginate(5);

В Вашем случае, select('*') не нужно, потому что по умолчанию выбираются все записи. Для корректного срабатывания условия ditinct() необходимо указать конкретные поля для выборки, например ->select('users.name','users_image.name') , в таком случае выберутся нужные поля и на них наложится distinct(), то есть возьмутся уникальные значения.

Если же Вам нужно выбрать только одну картинку для каждого пользователя, то необходимо добавить дополнительное условие в запросе:

        $data = DB::table('users')
              ->leftJoin('users_image', function($join) {
                $join->on('users_image.name', '=', 'users.name');
              })
              ->distinct()
              ->whereIn('users_image.id', DB::raw('select max(id) from users_image group by name'))
->paginate(5);
Answer 2

Исправил запрос на ->whereIn('image.ID', [DB::raw('select max(ID) from image group by image.Lot')]) и все вывелось как надо

READ ALSO
Получить домен из URL

Получить домен из URL

Допустим есть ссылки вида:

100
Замена числа на слово

Замена числа на слово

Допустим имеется переменная $test и в ней хранится число от 1 до 3

103
Проверка на работу сайта PHP

Проверка на работу сайта PHP

Хочу проверять свои сайты с админ сайта на работуКак это лучше организовать? Думаю сделать специальные ссылки для каждого и получать с них...

104