2017-04-06 47 views
0

我有我的数据库user_projects的列中3个表中laravel加入3个表使用DB类似列名

project_id, 
user_id, 
role 

project_invitations与列

project_id, 
email, 
role 

最后users id, email

我想使用laravel查询生成器来加入这三个表,以便我可以得到

userid, role, email,   invited_user 
null member [email protected]   true 
1  owner [email protected]  false 
2  member [email protected]  true 

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

[ 
    { 
     "email":"[email protected]", 
     "id":2, 
     "role":"owner", 
     "invitedEmail":"[email protected]", 
     "invitedRole":"member" 
    }, 
    { 
     "email":"[email protected]", 
     "id":2, 
     "role":"owner", 
     "invitedEmail":"[email protected]", 
     "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(); 
+0

你不能用在你想要的结果上'users.id'加入'users'表你想要的结果有一个空id其中一个用户不存在这不会加入该列。 –

回答

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