【问题标题】:Laravel - use join to select all from one table and a value from the otherLaravel - 使用连接从一个表中选择全部并从另一个表中选择一个值
【发布时间】:2020-08-17 22:01:42
【问题描述】:

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

所以我做的是:

$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”的情况下,我才能从电子邮件表中选择所有内容并从用户表中获取用户名。

【问题讨论】:

    标签: php mysql database laravel join


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢基兰!
    猜你喜欢
    • 2016-09-08
    • 2020-03-21
    • 1970-01-01
    • 2015-05-03
    • 2018-06-05
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多