[CakePHP] 独自SQLのAS句で新しいフィールドを作りCakePHPの形式でデータを出力する方法

CakePHPで独自SQLを使うには幾つかCakePHPの作法を覚える必要があります。CakePHPではmysqlのデータベース名は「users」と小文字の複数形、モデルのデータは「User」と頭が大文字の単数形になります。
独自SQL文ではAS句を使い「users AS User」という形にするとCakePHPのモデルの出力の形式になります。バーチャルフィールドを使うときは、特にCakePHPの独特な書き方があり、それを使わずMySQLを使う感覚でSQL文を書くとエラーになります。

モデルのデータを抽出

ユーザーデータテーブル(モデル):User
都道府県データテーブル(モデル):Prefecture
を作成します。

データの確認(User)

出力結果

データの確認(Prefecture)

出力結果

AS句とWHEREの使い方

UserとPrefectureを LEFT JOINしてデータを取得。
Where句で年齢を30歳を超えるに指定

出力結果

AS句で新しいフィールドを作って計算

AS句で年齢の半分を計算してみます。試しにAS句のあとに「HalfAge」という新しいフィールド名を指定します。

出力結果

[HalfAge] の項目は[User]の中に入るようにしたいのですが、[0]という新しいキーが作られてしまいます。
「 User.age/2 AS User.HalfAge」のようにHalfAgeの前にUserをつけるとどうなるか?

これはエラーになってしまいます。

AS句で新規フィールドを作り、CakePHPの出力形式でデータを出力する

CakePHPで新しいフィールドをAS句を使って作る場合は、以下のようにします。

1行目:バーチャルフィールドを使う場合、以下のようにモデル名とバーチャルフィールド名を宣言します。
$this->User->virtualFields[‘HalfAge’] = 0;
書式は「$this->モデル名->virtualFields[‘フィールド名’] = 0;」となります。

4行目:バーチャルフィールドの記載
User.age/2 AS User__HalfAge
AS句のあとは「モデル名__バーチャルフィールド名」とします。モデル名とバーチャルフィールド名の間はアンダーバーが2つ連続します。

出力結果

テスト用データ

User

Prefecture



Author: webmaster