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

Mysql 如何从多个关系中的两个表中获取数据?,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有用户和电子邮件表。每个用户都有许多电子邮件,并且每个电子邮件可以有许多用户。我有用户\u电子邮件数据透视表来查询数据 $all=User::with('emails')->get(); 上面的查询工作正常,但现在我想使用WHERE子句获取具有特定电子邮件的特定用户。到目前为止我已经试过了,但是结果是不可预测的 $all=User::with(array('emails'=>function($query){ $query->where('users.Id

我有用户和电子邮件表。每个用户都有许多电子邮件,并且每个电子邮件可以有许多用户。我有用户\u电子邮件数据透视表来查询数据

 $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

将闭包传递给
with()
将过滤急切加载的模型,但不会更改
User
模型返回的内容。为此,您需要
whereHas()


可以使用普通的旧内部联接进行此操作。此查询应提供用户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

column not found emails.Id:(
emails
中是否有
Id
列?是的,这是我表格的主键现在可以正常工作了,我将查询改为$all=User::with('emails')->where has('emails',function($query){$query->where('users\u email.email\Id','124')->where('users\u email.Uid','78'));//或任何其他where条件})->first();$all->email;//它打印用户表中的电子邮件Id,但不打印电子邮件表中的邮件$all->message;如果您只想按Id发送电子邮件及其邮件,为什么不使用
$email=email::find(124);echo$email->message;
?我不想使用简单的东西,即使我可以使用简单的内部连接。。!
select * 
from users, user_email, email
where users.id=user_email.email_id and usermail.email_id=email.id
and users.id=45