我有用户和电子邮件表。每个用户都有很多电子邮件,每个电子邮件都有很多用户。我有users_email数据透视表来查询数据。
$all=User::with('emails')->get();
上面的查询工作正常但现在我想使用WHERE子句来获取具有特定电子邮件的特定用户。到目前为止我已经尝试了这个,但结果是不可预测的。
$all=User::with(array('emails'=>function($query){
$query->where('users.Id','=','78')->where('emails.Id','=','124');
}))->first();
我希望运行此查询,但实际上它不是
select * from users inner join users_email on
users.Id=user_email.Uid inner join email on
email.Id=user_email.email_id where email.Id=78
AND users.Id=45
答案 0 :(得分:2)
将闭包传递给with()
将过滤热切的加载模型,但不会更改返回的User
模型。为此,您需要whereHas()
:
$all = User::with('emails')->whereHas('emails', function($query){
$query->where('email_id','=','124');
})->get();
答案 1 :(得分:0)
您可以使用普通的内部联接。此查询应该为您提供用户ID 78的所有电子邮件地址:
select *
from users, user_email, email
where users.id=user_email.email_id and usermail.email_id=email.id
and users.id=45