Laravel5 join したテーブルの条件で絞り込む


Eloquent で JOIN したテーブルのカラムで絞り込む場合の書き方です。

やり方

次のようにします。

Eloquent で使われる文字列は、 最終的にそのまま結合されますので、 (テーブル名).(カラム名) という書き方をすればいいことになります。 with を使う場合でも、 結合したテーブルのカラムを条件に刷る場合は leftJoin をつける必要があります。 with で指定されたテーブル(メソッド名)は、 メインのSQLが実行された後に再度SQLを実行して取得されますから。

そして気にするべきは、 orderBy, get の中でもテーブル名を指定してカラムを記述しているところです。 上で述べたとおり、文字列がそのまま結合されてSQLになりますから、テーブル名をつけずにSQLを実行するとどのテーブルのカラムか特定できず ambiguous column name というエラーが出ることがあります。 これはLaravel5 LEFT JOIN したら ID が null になった場合の対処法 にも書いたことです。