我刚刚创建了一个名为group的表,并生成了引用到此表的框架文件。
我意识到这个名称输入与MySQL保留字冲突,因为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

有办法避免这种错误吗?

最佳答案

实际上,您可以启用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`");
    }

}

这将生成如下查询:
选择
MyGroup.id为“MyGroup\u id”,
MyGroup.filed1为“MyGroup”filed1

`组`MyGroup
使用CakePHP 3.6$Group->find()->all()成功运行。

10-04 12:14