我正在尝试执行此查询:
select
*
FROM
users
left join emails on users.id = emails.user_id
WHERE
users.username = 'firstuser'
and emails.emailType = 'Primary';
这就是我所拥有的,但它给了我一个错误:
$user = User::where('username','firstuser')->with('emails')
->where('emailType','Primary')
->get();
该消息表明未进行加入:
Column not found: 1054 Unknown column 'emailType' in 'where clause' (SQL: select * from `users` where `username` = firstuser and `emailType` = Primary)
另外,在我的User.php模型文件中有一个函数emails():
public function emails()
{
return $this->hasMany('Email');
}
在我的Email.php模型中,我有一个user()函数
public function user()
{
return $this->belongsTo('User');
}
我尝试了很多组合,但无法同时兼顾条件。我想将此作为一个查询,而不是两个查询(获取用户ID,然后使用user_id查询电子邮件)在此先感谢任何和所有帮助!
答案 0 :(得分:2)
您需要在回复where
时为emails
关系指定with()
,否则,Eloquent会认为您正在尝试查找emailType
} users
表中的字段。
$user = User::with(['emails' => function($query){
$query->where('emailType','Primary');
}])->where('username','first user')
->get();
答案 1 :(得分:0)
我根据上面的评论让这个工作。但是,它并不是一个非常优雅的解决方案,因为我在模型中定义了关系,但是连接类绕过所有这些来强制连接。这是有用的......
$user = User::join('emails', 'users.id', '=', 'emails.user_id')
->where('emailType','=','Primary')
->where('username',$username)
->get();
当您想要查询模型时,如果他们不习惯加入表格,那么定义模型中的关系有什么意义?也许我错过了一些东西。