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);
    }