2017-08-30 44 views
0

我遇到Laravel表加入問題。當下面的代碼運行其顯示結果:Laravel多個加入問題

$result = DB::table('users') 
     ->join('role_user', 'users.id', '=', 'role_user.user_id') 
     ->where('role_user.role_id', $roleId)   
     ->join('roles', 'role_user.role_id', '=', 'roles.id') 
     ->select('users.*','role_user.role_id','roles.display_name','roles.description')   
     ->get(); 

但是當我將代碼分成如下:

$result = DB::table('users'); 
     $result->join('role_user', function ($join) { 
      $join->on('role_user.role_id', '=', 'users.id') 
      ->where('role_user.role_id', $roleId);   

     }); 
     $result->join('roles', function ($join){ 
      $join->on('role_user.role_id', '=', 'roles.id'); 
     }); 
     $result->select('users.*','role_user.role_id','roles.display_name','roles.description'); 
     $result->get(); 

似乎具有「用戶」表中加入了「角色」表,但它需要與'role_user'表連接,因爲它在第一個查詢上。

在此先感謝。

+0

你能解釋一下你到底想要什麼嗎?問題不明確 – Sletheren

+0

你有沒有想過使用關係來做到這一點?如果你使用pivot_table作爲roles_users,用戶將擁有belongsToMany角色,角色也是一樣的,那麼你可以用users :: with('roles)或roles :: with('users') – rchatburn

+0

@Sletheren我有一個加入第二個表格和第三個表格與關係有關的問題。第三張桌子試圖加入第一張桌子。 – Tristup

回答

0

您正試圖訪問閉包/匿名函數中的變量$ roleId。因此,您需要將此變量傳遞給閉包。這應該導致相同的結果。

$result = DB::table('users') 
    ->join('role_user', function ($join) use ($roleId) { 
     $join->on('role_user.role_id', '=', 'users.id') 
     ->where('role_user.role_id', $roleId) 
    }) 
    ->join('roles', function ($join){ 
     $join->on('role_user.role_id', '=', 'roles.id'); 
    }) 
    ->select('users.*','role_user.role_id','roles.display_name','roles.description')  
    ->get(); 
+0

我認爲你已經給出了第一個問題。我需要第二個的格式。 – Tristup

+0

@Tristup根據您的需求更新了查詢。應該正常工作,在本地進行測試。 – fab

+0

但@fab我需要它被分解成像我的第二個查詢不同。如果角色表沒有連接到關係所在的角色用戶。它建立與用戶表的關係。請嘗試獲取與第二個相同的格式。 – Tristup