cake3にはautoquotingというものがあるらしい
field に key
という MySQL の予約語を持つ既存のシステムがあって、cake2 では動いていた
それを cake3 に移行した時に、MySQL でエラーがでた
DebugKit を使って、SQL log 見てみると、key
が quote されずにいたためだった
cake2 のときは自動で quote されたはずなのにと思いながら見てみていると、cake3 は autoQuote がデフォルトで false になっているようだ
File Database/Driver.php | CakePHP 3.0
ということで、以下のように quote を beforeSave() で有効化、afterSave() で無効化すれば良い
<?php public function beforeSave(Event $event, EntityInterface $entity, ArrayObject $options) { $this->connection()->driver()->autoQuoting(true); } public function afterSave(Event $event, EntityInterface $entity, ArrayObject $options) { $this->connection()->driver()->autoQuoting(false); }