如何从多个关系中的两个表中获取数据?

时间:2015-02-18 10:48:31

标签: mysql laravel eloquent

我有用户和电子邮件表。每个用户都有很多电子邮件,每个电子邮件都有很多用户。我有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

2 个答案:

答案 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