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を使う事で変数をパラメータとして受け渡すことが可能になります。