New ORM Upgrade Guide — CakePHP Cookbook 3.x documentation
Identifier Quoting Disabled by Default
In the past CakePHP has always quoted identifiers. Parsing SQL snippets and attempting to quote identifiers was both error prone and expensive. If you are following the conventions CakePHP sets out, the cost of identifier quoting far outweighs any benefit it provides. Because of this identifier quoting has been disabled by default in 3.0.
CakePHP 2系までは、テーブル名、フィールド名等の識別子がDBMSの予約語と混じらないように引用符(MySQLであれば`
)で囲まれていました。
CakePHP 3以降では、この機能がデフォルトで無効になっています。
(処理速度の面などから無効化されたようですね。
フィールド名に、予約語である date
や order
などを使用するとSQLエラーとなったり、予期しない動作を引き起こす可能性があります。
以前のように識別子のクォートを有効にするには、データソースのオプションで quoteIdentifiers
を true
に指定します。
// In config/app.php 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Driver\Mysql', 'username' => 'root', 'password' => 'super_secret', 'host' => 'localhost', 'database' => 'cakephp', 'quoteIdentifiers' => true ] ],