Laravel查询用连接和多个在哪里

时间:2014-08-12 16:50:33

标签: laravel eloquent

我正在尝试执行此查询:

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查询电子邮件)在此先感谢任何和所有帮助!

2 个答案:

答案 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();

当您想要查询模型时,如果他们不习惯加入表格,那么定义模型中的关系有什么意义?也许我错过了一些东西。