Laravel-使用联接从一个表中选择所有表,从另一个表中选择一个值

时间:2020-05-03 14:16:31

标签: php mysql database laravel join

我有两个表“ emails”和“ users”,我希望能够使用一个查询来获取有关该电子邮件的所有信息以及该电子邮件分配给该用户的信息(可以选择不分配任何一个)到此电子邮件)。

所以我要做的是:

$userInfo = Emails::leftjoin('Users', 'Emails.email', '=', 'Users.email')
  ->select('Emails.*', 'Users.username')
  ->where([
    ['Emails.owner_id', '=', Auth::id()],
  ])
  ->get();

据我所知,此解决方案几乎可以正常工作,但该解决方案还选择了已删除的用户(用户的值在Deleted_at中),因此最简单的解决方案是添加

['Users.deleted_at', '=', null],

这有助于删除用​​户,但在上述条件下,我不再收到未分配给任何人的电子邮件。

只有当'Emails.email','=','Users.email'时,我才能从电子邮件表中选择所有内容并从用户表中获取用户名。

1 个答案:

答案 0 :(得分:0)

在您的电子邮件模型中,将此用户关系与您的用户模型名称一起添加

public function users(){
    return $this->hasMany(Users::class, 'email', 'email')->whereNull('deleted_at');
}

在您的控制器中,您不会像这样删除用户

$userInfo=Emails::with('users')->where('owner_id', Auth::id())->get();

您可以在所有电子邮件数据中获得这样的用户名。

$userInfo->users->username