Cakephp PHP WEB開発

【Cakephp】クエリビルダーのキーにSQL関数を利用する

※本サイトはPR表記を含みます。

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のように、キー内に直接記述することで、よしなに読み込んでくれるようになります。

-Cakephp, PHP, WEB開発
-