CakePHP 3では識別子がクォートされなくなっている

標準

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以降では、この機能がデフォルトで無効になっています。
(処理速度の面などから無効化されたようですね。

フィールド名に、予約語である dateorder などを使用するとSQLエラーとなったり、予期しない動作を引き起こす可能性があります。

以前のように識別子のクォートを有効にするには、データソースのオプションで quoteIdentifierstrue に指定します。

// In config/app.php
'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Driver\Mysql',
        'username' => 'root',
        'password' => 'super_secret',
        'host' => 'localhost',
        'database' => 'cakephp',
        'quoteIdentifiers' => true
    ]
],

コメントを残す

Page optimized by WP Minify WordPress Plugin