CakePHP 3.0: синтаксическая ошибка Mysql, вызванная классом с именем Group - PullRequest
0 голосов
/ 15 мая 2018

Я только что создал таблицу с именем group и сгенерировал файлы скелетов, на которые ссылается эта таблица.

Я понял, что это имя вступает в конфликт с MySQL Reserved Words, потому что cakephp3.0 генерирует такие запросы:

SELECT 
     Group.group_id AS `Group__group_id`, 
     Group.name AS `Group__name`, 
     Group.created_at AS `Group__created_at` 
FROM 
     group Group 
LIMIT 
     20 OFFSET 0

Это выдает эту ошибку:

 Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You 
have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 'group Group 
LIMIT 20 OFFSET 0' at line 1

Есть ли способ избежать такого рода ошибок?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Действительно, вы можете включить quoteItendifiers, но это приводит к снижению производительности, как сказано в комментарии над ним.

Я использую другое решение этой проблемы, настроив Table class для проблемного db_table, например, так:

Обратите внимание, что псевдоним таблицы переименовывается, а также имя таблицы Я сбежал вручную

class GroupTable extends Table
{
    public function initialize(array $config)
    {
        parent::initialize($config); // TODO: Change the autogenerated stub
        $this->setAlias('MyGroup');
        $this->setTable("`group`");
    }

}

Это сгенерирует запрос, похожий на этот:

SELECT 
  MyGroup.id AS `MyGroup__id`, 
  MyGroup.filed1 AS `MyGroup__filed1` 
FROM 
   `group` MyGroup

С CakePHP 3.6 $Group->find()->all() работает успешно.

0 голосов
/ 15 мая 2018

Я только что нашел решение. Решение состоит в том, чтобы изменить значение ' quoteIdentifiers ' на true в конфигурации источника данных. Может вам нужно очистить кеш.

Источник: https://book.cakephp.org/3.0/en/orm/database-basics.html#configuration

...