意外と使う機会がなくてハマったので備忘録.
状況
- articles テーブルと users テーブルが存在する.
- user は article に like することができ,user と article は多対多となっている.
- 指定したユーザ(複数)が like した article のデータを取得したい.
テーブル構成
articles
id | text |
---|---|
1 | hoge |
2 | fuga |
3 | piyo |
4 | foo |
5 | bar |
6 | baz |
users
id | name |
---|---|
1 | Giorno |
2 | Bucciarati |
3 | Mista |
4 | Abbacchio |
5 | Fugo |
article_user
article_id | user_id |
---|---|
1 | 1 |
1 | 2 |
2 | 2 |
3 | 3 |
4 | 3 |
4 | 4 |
解決策
例えば,article_user テーブルの user_id が 1, 2, 4 のものを取得したいとする.
予め user の id の配列を作っておき,whereIn の第 2 引数を利用すればOK.
// user の id の配列を用意しておく.
$users = [1, 2, 4];
// 第 2 引数にクエリを渡し,中間テーブルに whereIn を使う.
$articles = Article::whereIn(
'id',
fn ($query) =>
$query->select('article_id')
->from('article_user')
->whereIn('user_id', $users)
);
以上だ( `・ω・)b