Cakephp のクエリビルダーにて配列キーにSQL関数を実行する場合、自動的に発行されるSQLに「=」が付与されないのでシンタックスエラーになります。
対策としては、以下のようになります。
クエリビルダーにてキーにSQL関数を実行する場合は「=」を明示する
$query->where([ 'user_id' => $userId, // イコールが自動付与される 'DATE_FORMAT(month, "%Y-%m") = ' => $month, // イコールが自動付与されないため、「=」を記述する ]);
上記コードのように、配列キーにて SQL関数を実行しようとすると、イコールが自動付与されません。
そのような場合、明示的にイコールを付与すればOKです。
例: ページネート: ORDERの場合
// クラスメソッド内 $settings = [ 'group' => ['name', 'type'], 'order' => ["DATE_FORMAT(created, '%Y-%m') DESC"], // 「=>」の書き方は無効になるので注意 'limit' => 20, ]; $this->set('modelName', $this->paginate($this->ModelNames, $settings));
コード内にもコメントに残しましたが、SQL関数を実行させたい場合、配列の「Key => Value」 形式は無効になってしまうので要注意です。
素のSQLのように、キー内に直接記述することで、よしなに読み込んでくれるようになります。