Я пытаюсь сделать простую нумерацию запроса, который использует представление:
DB::table('vw_myview')->paginate(50)
И получите эту ошибку:
SQLSTATE [42000]: Синтаксическая ошибка или нарушение доступа: 1140 Смешивание столбцов GROUP (MIN (), MAX (), COUNT (), …) без столбцов GROUP недопустимо, если отсутствует предложение GROUP BY (SQL: select считать (*) как агрегат из vw_myview)
Тем не менее, когда я вручную запускаю запрос, он работает просто отлично:
mysql> select count(*) as aggregate from vw_myview;
+-----------+
| aggregate |
+-----------+
| 776 |
+-----------+
1 row in set (0.20 sec)
После осмотра я обнаружил, что мне просто нужно добавить GROUP BY
пункт (так же, как об ошибке говорит), и я попытался сделать это без удачи:
DB::table('vw_myview')->groupBy('column_on_view')->paginate(50)
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 ‘database_name.table_used_by_view.column_on_table’ отсутствует в GROUP BY (SQL: выберите количество (*) как агрегат из группы vw_myview по column_on_view
)
Хорошо, давайте попробуем сгруппировать по столбцу в одной из таблиц, которые использует представление:
DB::table('vw_myview')->groupBy('table_used_by_view.column_on_table')->paginate(50)
SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «database_name.table_used_by_view.column_on_table» в «групповом операторе» (SQL: выбрать количество (*) в качестве агрегата из группы vw_myview по database_name.table_used_by_view.column_on_table)
Так почему же запрос работает, когда я запускаю его вручную, но не работает при запуске через Eloquent? Любая помощь будет принята с благодарностью.
Вы знаете, я думаю, что на вашем сервере Mysql включен sql_mode = ONLY_FULL_GROUP_BY … Можете ли вы проверить это … (из mysql … select @@ sql_mode; Если он установлен, выключите его … и попробуйте Ваш запрос снова … Я думаю, что он пройдет … Mysql 5.7xxx теперь включен по умолчанию …
Других решений пока нет …