Yii2のActiveQueryでselectに式を使う時の注意点

Yii2の ActiveQuery を使ってて select に式を使いたい時ってありますよね。

select を設定するのは普通にこんな感じ

$query = FooModel::find()->select([
    '*',
    'field1',
    'field2',
]);

追加で select を設定する時は”*”を忘れずに

$query = FooModel::find()->addSelect([
    'field3',
    'field4',
]);

もしくは addSelect() で設定する。

これは単に field を追加する例ですが普通に使っててあんまりこんな事ないですよね。
追加したいのはだいたいが、column に存在しないものを式として追加したい時

何も考えずにCASE文を追加するなら追加するならこうなる

$query = FooModel::find()->addSelect([
    'CASE WHEN foo1 IS NULL THEN foo2 ELSE foo3 END as foo',
]);

こうなるはずがこれだとエラーが出てしまう。

Column not found: 1054 Unknown column ‘CASE WHEN foo1 IS NULL THEN foo2 ELSE foo3 END’

こんなエラーが。
「そんなカラムねぇよ」と
知ってるよ。

じゃぁ select に式が使えないかというとそうじゃない。
ただの文字列を指定すると、それはカラムとしてYii2側で勝手に「“」を付けてくれてるんですな。

SELECT
    *
    `CASE WHEN foo1 IS NULL THEN foo2 ELSE foo3 END`
    FROM foo_model

実際にはこんなSQLが実行されてる。
そらエラーなるわ。

じゃぁどうするのかというと「()」と括弧を付けてやると
Yii2側でだたのカラム指定じゃなくて式なんだなと判定してくれるので無事実行されるようになる。

$query = FooModel::find()->addSelect([
    '(CASE WHEN foo1 IS NULL THEN foo2 ELSE foo3 END) as foo',
]);

こんな感じで括弧を入れてやる。

分かってしまえばなーんだって事やけど
知らないと少しハマるのでご注意ー

cakephp2.2 Model createdのtimezoneがUTCになる

Timezone+9

 

なぜか cakephp上では変な時間(UTC)になってしまう時の対策。

続きを読む cakephp2.2 Model createdのtimezoneがUTCになる

PhpStorm cakephp Vendorに設定したclassの補完を有効にする

Screenshot_from_2013-02-06 16:48:20

 

はい。今日もPhpStormネタです。

cakephpで直接継承はしていないVendorやらに置いたClassを補完する方法。

続きを読む PhpStorm cakephp Vendorに設定したclassの補完を有効にする

PhpStorm cakephp Controller で Model の補完を有効にする

Screenshot_from_2013-02-06 15:36:00

 

今日も懲りずにPhpStormネタ。

Controllerで uses なんかで定義したModelの補完を有効にする方法。

続きを読む PhpStorm cakephp Controller で Model の補完を有効にする

PhpStorm cakephp で Viewファイル編集で補完を有効に

Screenshot_from_2013-02-06 16:48:20

 

連日PhpStormの話題ですが。

30日お試し期間に試しまくってるもんで。

cakephpのViewファイルをいじってる時にも補完が出てくるようになる方法を教えてもらったのでご紹介。

続きを読む PhpStorm cakephp で Viewファイル編集で補完を有効に

PhpStorm でフォントのアンチエイリアスを有効にする

tx_aliasing_off

 

先日インストールしてみてがんがんお試し中なPhpStorm。

これはすげぇ!楽しい!と喜んでたんですが、唯一気に入らない点が。

ubuntuで使用しているとフォントがギザギザ。

どうやらこの現象はMacとかでは起こらないようで悔しい。

これさえなければと色々試しているうちになんとか解消出来たので方法をメモ。

続きを読む PhpStorm でフォントのアンチエイリアスを有効にする

話題の PHP IDE PhpStormを試してみた

Screenshot_from_2013-02-06 15:36:00

 

 

JetBrainsユーザーグループ in 大阪で紹介されていた話題の PHP IDE PhpStorm がすごい便利らしいのでどんなもんやと試してみることに。

続きを読む 話題の PHP IDE PhpStormを試してみた

PHPフレームワーク「yii」を導入してみる #phpkansai

yii_hosting

 

第5回関西PHP勉強会 でハンズオンをやってもらったyiiを導入してみますよ。

PHPフレームワークといえばcakephpが有名やけど日本以外では色んな物が使われてるようで。

恥ずかしながらハンズオンでは自分のローカルの実行環境がさっぱりで迷惑かけたので復習がてら。

続きを読む PHPフレームワーク「yii」を導入してみる #phpkansai