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',
]);

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

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

Yii2のDB Connectionはmaster slaveを切り替えてくれる

Yii2アドベントカレンダー2014の23日目に無謀にも挑戦させてもらいました拙ブログですが

Qiitaじゃなくていいのかなと思いつつこちらに書かせてもらいます。

続きを読む Yii2のDB Connectionはmaster slaveを切り替えてくれる

WordPressのxmlrpc.phpへのpingback攻撃対処法

妙にブログのアクセスが減ってるなーと確認してみると

レスポンスが異常に悪い。

調査しようとSSHでサーバーに接続してもログインすら出来ない状態。

焦ってさくらのコントロールパネルから再起動してログを調べるとどうも攻撃にあってたらしい。

[cc lang=’text’ line_numbers=’false’]

192.187.118.162 – – [03/Oct/2014:23:53:36 +0900] “POST /xmlrpc.php HTTP/1.0” 200 1029 “-” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)”
192.187.118.162 – – [03/Oct/2014:23:53:37 +0900] “POST /xmlrpc.php HTTP/1.0” 200 1029 “-” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)”
192.187.118.162 – – [03/Oct/2014:23:53:37 +0900] “POST /xmlrpc.php HTTP/1.0” 200 1029 “-” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)”
192.187.118.162 – – [03/Oct/2014:23:53:37 +0900] “POST /xmlrpc.php HTTP/1.0” 200 1029 “-” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)”
192.187.118.162 – – [03/Oct/2014:23:53:37 +0900] “POST /xmlrpc.php HTTP/1.0” 200 1029 “-” “Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)”

[/cc]

こんなログが山盛り

※このIPは実際に攻撃してきやがったIPです

ご注意ください!!WordPressの脆弱性をついた攻撃が再燃しています。

http://www.denet.ad.jp/news/2014/08/wordpress.html

どうやらxmlrpc.phpの脆弱性を突いたPingback機能を使った攻撃が最近また流行ってると。

どーにかこーにか対策してみたので対策方法のご紹介でも。

続きを読む WordPressのxmlrpc.phpへのpingback攻撃対処法

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ファイル編集で補完を有効に

WordPress に各種共有ボタンを導入

 

wp-social-sharingはてぶ や Twitter Facebook のいいね!とか全部個別に導入してるとえらい手間に。

ってことで何かいいプラグインは無いかと探してみたら 「WP Social Bookmarking Light」 ってのが良いらしい。

WordPressの管理画面のプラグインから検索でさくっとヒット

続きを読む WordPress に各種共有ボタンを導入