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

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

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

Nexusシリーズ向けOTA更新ファイル一覧

前回の記事で手動更新したNexusシリーズ。

自分はNexus7 2012 wifiの更新だったんですが、そん時に調べて見つけた更新ファイルのリストを残しておこうかと。

基本的にLollipop向けです。

続きを読む Nexusシリーズ向けOTA更新ファイル一覧

NexusシリーズのOTAを自分で適用する方法

Googleが提供するスマートフォンやタブレットとしてすっかり定着したNexusシリーズ。

自分も携帯は Nexus5 タブレットは Nexus7 と余計なことをしていないプレーンなAndroidの使いやすさに離れられなくなった一人なんですが。

常に最新のバージョンが適用されるNexusシリーズ。

ただ世界中のNexus端末にいっぺんに適用する訳にはいかないので順番待ちがあるわけですな。

これがなかなかにもどかしい。

ニュースなんかで「ついに配信!」ってのを見ても全然自分には降ってこない。

ってなわけでこのOTAを adb sideload を使って自前で適用してしまう方法のご紹介を。

今回ご紹介の方法はroot取得も必要ないし、データのバックアップも必要ありません(順調に終われば)

通常OTA経由で直接適用される更新をPC経由でやっていまおうという方法。

続きを読む NexusシリーズのOTAを自分で適用する方法

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

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

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

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

Nexus6 Nexus9 についてまとめてみた

発売の決まっていた最新Android搭載Nexus端末。

Nexus6とNexus9がついに発表されましたなー。

Android L としてコードネームのみ発表済みだった名称は「Lollipop」に。

続きを読む Nexus6 Nexus9 についてまとめてみた

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攻撃対処法

Apple Developer登録にFirefox OSが

Apple Developerに登録する時のアンケートで

他のプラットフォームでどんな開発してる?のところに

Firefox OSのチェックボックスが。

ちょっとずつメジャーになってきてますなー。

なんだかちょっと嬉しい。

ubuntu12.04をインストール済みのPCにWindows7を追加してデュアルブート

ずっと使っているubuntu 12.04 をインストール済みなXPS13。

こいつはubuntuオンリーで動かしてたけどWindows環境が必要になったので

今のubuntu環境はそのままにWindows7を追加してデュアルブートにすることに。

これがWindowsインストール済みなPCからのデュアルブートは情報が多いんやけど逆はなかなか無かったので残しておこうじゃないかと。

続きを読む ubuntu12.04をインストール済みのPCにWindows7を追加してデュアルブート