使用具有相似列名的DB在laravel中连接3个表

时间:2017-04-06 14:29:40

标签: laravel join

我的数据库user_projects中有三个包含列

的3个表
 project_id,
 user_id,
 role

project_invitations

 project_id,
 email,
 role

最后users id, email

我想使用laravel查询构建器加入这三个表,以便我可以

userid,  role,  email,          invited_user 
null    member  test@gmail.com          true
1       owner   test123@gmail.com       false
2       member  test12@gmail.com        true 

到目前为止,我得到了以下数据

[
    {
        "email":"test@sharklasers.com",
        "id":2,
        "role":"owner",
        "invitedEmail":"test@gmail.com",
        "invitedRole":"member"
    },
    {
        "email":"test@sharklasers.com",
        "id":2,
        "role":"owner",
        "invitedEmail":"safda@gmail.com",
        "invitedRole":"member"
    }
]

使用以下查询

DB::table('user_projects')
            ->join('users', 'user_projects.user_id', '=', 'users.id')
            ->join('project_invitations', 'project_invitations.project_id','=','user_projects.project_id')
            ->where('user_projects.project_id', '=', $projectId)
            ->select('users.email', 'users.id', 'user_projects.role', 'project_invitations.email as invitedEmail','project_invitations.role as invitedRole')
            ->get();

1 个答案:

答案 0 :(得分:0)

即使没有记录的连接,您也需要使用外连接来获取所有记录。

DB::table('user_projects')
            ->join('users', 'user_projects.user_id', '=', 'users.id', 'outer')
            ->join('project_invitations', 'project_invitations.project_id','=','user_projects.project_id', 'outer')
            ->where('user_projects.project_id', '=', $projectId)
            ->select('users.email', 'users.id', 'user_projects.role', 'project_invitations.email as invitedEmail','project_invitations.role as invitedRole')
            ->get();