update.Yii2アドベントカレンダー6日目の記事です。今日から4連発の予定なのにいきなり飛ばします。いうのを憶えれば80%言いたいことは伝わっています。前置きをしておいて、と。目玉はなんといってもデータベースの操作が洗練されたことでしょう。暗黙のテーブルエイリアスが付かない、素朴なクエリを出力するようになりました。相似性が高くなります。アプリケーションでは、複雑なクエリ1本でデータベースに仕事をさせるよりも、データベースへの問い合わせをなるべくキーバリューストア的にアクセスして、スケールアウトできるアプリケーション側がキャッシュを駆使してがんばる、というトレンドがあることも、このデフォルトエイリアスなし方針と関係あるかもしれません。これをクラス実装で表すと次のようになります。なんとかなりそうです。使ったカラム名指定が必要になります。隠蔽できていない感じですね。true,]);これが気に入らない人は、こう書くこともできます。true,]);まだどうしてもエイリアスが必要というわけではありません。持つ場合を考えてみましょう。}}さきほどの作者の属性による抽出に、さらに「レビュアーが一定以上の評価を持つ場合でもよい」という条件が加わるとどうでしょうか。`programmer`.`id`おかしいですね。同じテーブルをそのままの名前で2つ結合しています。テーブル名でカラム指定を区別できなくなってしまいました。クエリがうまく統合されています。することも自然に可能です。source_code.reviewer_id結合条件を文字列で指定したので、クオートの有無が変わってしまいましたが、意味は上の重複したテーブル結合と同じです。使っていれば、キー入力のほとんどは補完されます。がなにか警告してくれるかもしれません。コードの評価失敗になってくれます。詳しい人は、そろそろテーブルにエイリアスを指定しないといけないことに気づいているでしょう。おけるエイリアスの指定はこうです。キーと値がそれぞれエイリアスとテーブルを指します。いう名前が付きました。複数のリレーションが同じテーブルを参照する時もリレーション定義を使いたいけれど、せっかくリレーションを定義したのだから、なんとかそれを利用したいものです。どの外部キーで結合しているかを知らないと、クライアントコードが書けない、というのは、うまく知識を隠蔽したいですね。同じ要領でいけるなら、次のコードでリレーション版ができそうな気もしますが、残念ながらうまくいきません。結合を表す部分の配列は、「リレーション名とリレーションクエリを加工するコールバック」なのです。インスタンスを加工します。得ることができました。完全修飾名が入っています。クラス名さえも直接指定したくない場合は、それを使ってもかまいません。つなげればよいでしょう。文字列結合ではないので、この冗長なコードはいくらでもリファクタリングできます。単独のソースコードでも別の作者が手元にフォークすることができます。持っていた場合はどうでしょうか。`source_code`.`id`いきなりおかしいですね。両方にエイリアスを指定する必要があります。`origin`.`id`以上で、いっさいSQL文字列結合をすることなく、あらゆる関係で必要に応じてテーブルエイリアスを指定する方法がわかりました。扱うとき、たとえそれがテーブル名や構文であったとしても、文字列結合を避けたほうがいいのはたしかです。クエリビルダは、テーブル名やカラム名を含むあらゆる単語をクオートして、SQLインジェクション安全を確保しようとします。構文を表してしまうと、その恩恵にあずかることができません。長い文字列を書くとタイポのリスクも増えます。データベースを扱うコード品質の向上につながります。upLoginユーザーは見つかりませんでした。