Laravel 5.8 получить список дубликатов данных - PullRequest
0 голосов
/ 17 октября 2019

Я ищу наиболее подходящий метод для получения списка дубликатов в моей базе данных с помощью laravel и eloquent.

Пример записей таблицы:

id : 1
artist_name : Jane Doe
track_name : The doe song

id : 2
artist_name : John Doe
track_name : A love song

id : 3
artist_name : Jane Doe
track_name : The doe song

id : 4
artist_name : John Doe
track_name : Happy

id : 5
artist_name : John Doe
track_name : Happy

Ожидаемый результат (aсписок всех дубликатов):

id : 1
artist_name : Jane Doe
track_name : The doe song

id : 3
artist_name : Jane Doe
track_name : The doe song

id : 4
artist_name : John Doe
track_name : Happy

id : 5
artist_name : John Doe
track_name : Happy

Я попробовал следующий фрагмент кода, но получаю сообщение об ошибке:

$tracks = Track::whereIn('id', function ( $query ) {
    $query->select('id')->from('tracks')->groupBy('track_name')->havingRaw('count(*) > 1');
})->paginate(20);

SQLSTATE [42000]: ошибка синтаксиса илинарушение прав доступа: 1055 Выражение № 1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец table.tracks.id, который функционально не зависит от столбцов в предложении GROUP BY;это несовместимо с sql_mode = only_full_group_by (SQL: выберите количество () как агрегат из tracks, где id in (выберите id из tracks группы, track_name, имеющей количество ()>1))

1 Ответ

0 голосов
/ 17 октября 2019

Это не рекомендуется, но вы должны попробовать

Удалить ONLY_FULL_GROUP_BY из phpmyadmin

  • Открыть phpmyadmin и выбрать localhost
  • Нажмите меню Переменные и прокрутите вниздля режима sql
  • Нажмите кнопку редактирования, чтобы изменить значения и удалить ONLY_FULL_GROUP_BY и нажмите кнопку сохранения.

Или вы можете выполнить следующий запрос:

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
...