LaravelクエリビルダでJOINの条件に変数を使う

Laravel
スポンサーリンク

Laravelのクエリビルダで複数のテーブルを結合する時の条件に変数を使う方法についてメモ書きしておきます。

スポンサーリンク

SQLでテーブル結合

usersテーブルとsaraliesテーブルを結合して、2022年のsaralyを取得します。

[users]

id name
1 Tom
2 John
3 Sandra

[saralies]

id user_id year saraly
1 1 2021 50000
2 1 2022 51000
3 2 2021 60000
4 2 2022 61500
5 3 2021 70000
6 3 2022 72000

SQLで書くとこんな感じです。


SELECT
    users.name,
    saralies.salary
FROM
    users LEFT OUTER JOIN saralies ON users.id = saralies.user_id AND
                                      saralies.year = 2022

クエリビルダで結合

これをクエリビルダで書きます。その際に「2022」は変数とします。


// 変数$yearに2022年をセット
$year = 2022;

$users = DB::query()
    ->select([
        'users.id',
        'saralies.saraly'
    ])
    ->from('users')
    ->leftjoin('saralies', function($join) use($year) {
        $join->on('users.id', '=', 'saralies.user_id')
             ->where('saralies.year', '=', $year);
    })
    ->get();

useを使う事で変数をパラメータとして受け渡すことが可能になります。