Dkan Drupal Ошибка после установки модуля разрешения поля

После установки модуля Fields Permissions Drupal в DKAN появляется ошибка, когда я пытаюсь просмотреть свой каталог наборов данных в DKAN. Это нормально для меня, чтобы просмотреть отдельные наборы данных, перейдя к их индивидуальной гиперссылке.

Ошибка: SQLSTATE[HY000]: Общая ошибка: 3065 Выражение № 1 предложения ORDER BY отсутствует в списке SELECT, ссылка на столбец "dkan_opendatatest.t.changed" отсутствует в списке SELECT: это несовместимо с DISTINCT

Есть идеи, как решить эту проблему?

2 ответа

Это, вероятно, вид, который управляет страницей поиска. В раскрывающемся списке предполагается, что поле является списком выбора, но изменение этого поля заставляет это представление генерировать запрос SQL, который не поддерживается MySQL.

Скорее всего, это можно исправить, отредактировав представление в "/admin/structure/views/view/dkan_datasets/edit/panel_pane_1" и изменив "Индексированный узел: дата изменена" в "Критерии сортировки". Не уверен, что это будет правильным выбором "критериев сортировки" с вашими изменениями, но можно надеяться, что это можно выяснить, изменив "критерии сортировки". Возможно, удалите и повторно добавьте "измененное" поле.

Я также получил подобные ошибки в Drupal при посещении страниц admin / content и admin / people: Исключение в People[user_admin_people]: SQLSTATE[HY000]: Общая ошибка: 3065 Выражение #1 предложения ORDER BY отсутствует в списке SELECT, столбец ссылок 'mycmsschema.users_field_data.created', которого нет в списке SELECT; это несовместимо с DISTINCT

Выводимый им запрос работал нормально в Mysql Workbench, но не работал в Drupal8 при посещении этих страниц.

Mysql 5.7, похоже, не любит запросы Drupal8 (и, возможно, 7 запросов тоже, но не проверял). Необходимо понизиться до Mysql 5.6 (поэтому по умолчанию не используются супер строгие настройки sql_mode, такие как ONLY_FULL_GROUP_BY, которые по умолчанию используются в Mysql 5.7), или перейдите в core/lib/Drupal/Core/Database/Driver/mysql/Connection.php и измените:

 /*
      'sql_mode' => "SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY'",
      */

чтобы:

'sql_mode' => "SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'",

который работал для меня. Примечание: мысль об удалении только ONLY_FULL_GROUP_BY должна быть исправлена, но, похоже, мне тоже нужно было удалить часть отдыха.

Другие вопросы по тегам