tanaken.metanaken.mePortfolioPosts6/1/2018Laravelクエリビルダ-JOINとLEFTJOINLaravelには、クエリビルダというデータベースからレコードを取得する際に、直接SQLを書かずともデータベースに問い合わせることのできる機能が備わっています。加えてセキュリティ面においても、これらは優れていて、クエリビルダを用いることで、SQLインジェクションを意識せずにすみます。joinメソッドに関して曖昧でした。そこで今回は、これらの違いを簡単にまとめてみようと思います。検証にはLaravelで対話的にプログラムを扱えるtinkerを用いて進めます。それでは、booksとownerのテーブルを用いて解説して行きます。以下のテーブルをみていただければわかownersとbooksテーブルが1対多の関係にあります。join文を使用するには、クエリビルダインスタンスにjoinメソッドを使います。joinメソッドの第1引数は結合したいテーブル名、それ以降の引数にはJOIN時のカラムの制約条件を指定します。get():結合条件としてownersテーブルのidとbooksテーブルのowner_idが等しいものを結合します。joinの場合結合条件に一致しないデータがあった場合、その値は取得されません。いわゆる内部結合というやつです。結果をグラフ化すると次のようになります。4の3名に限られていることがわかります。joinでは、検索条件に一致していないyamadaとyokoyamaはテーブル内に表示されません。JOINを用いたいときには、クエリビルダインスタンスに対してlefjoin句を用います。第1引数は結合したいテーブル名、それ以降の引数にはJOIN時のカラムの制約条件を指定します。joinは、主キーのテーブルを全て返します。joinの時とは異なり、結合条件に一致しないデータがあってもnullとなって結果に出力されています。いわゆる外部結合というやつです。主キーのあるテーブルへ結合する。joinなんかもありますが、考え方は同じで、外部キーのあるテーブルへ結合するというふうに、向きが変わるだけです。内部結合と外部結合の考え方を押さえとけばバッチリだと思います。これに関しては、こちらのQitaの記事にうまくまとめられていたのでおすすめです。