背景
エンジニア初心者です。
社内であるプロジェクトを引き継いだのですが、ある検索画面にてバグを発見しました。
しかし現状のテーブル構成で適切な動きをするためにはどうすれば良いかわからなかったため、質問させて頂きました。
やりたいことはタイトルにある通り
「1対多の関係にあるテーブルで、多側テーブルのある値を指定し、それを持つ一側テーブルの要素を除いた結果を返す」
というものです。
環境はlaravel 5.4 + Mysqlです。
テーブルは以下のように1対多となっています。
・一側テーブル(名:users)
id | name |
---|---|
1 | A |
2 | B |
3 | C |
・多側テーブル(名:rental_histories)
id | user_id(FK) | book_number |
---|---|---|
1 | 1 | 101 |
2 | 1 | 102 |
3 | 2 | 101 |
4 | 2 | 103 |
5 | 3 | 101 |
この状態でuserを検索する場合に「rental_historiesテーブルに'103'を持つuser(B)を除いた結果を返す=userAとuserCを返す」
としたいです。
しかし下記のコードを試しても、rental_histroyの'101'があるからなのかA,B,C出てきてしまいます。
$users = User::whereHas('rental_histories',function($q){ $q->where('book_number', '<>', '103'); });
$users = User::join('rental_histories', 'users.id', '=', 'rental_histories.user_id)->where('rental_history.book_number', '<>', '103') ->get()
以上、方法についてご存知でしたらご教授頂けないでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 06:50