我刚刚创建了一个名为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()
成功运行。