2014-08-30 167 views
0

我有兩個表,一個用戶,一個用他們的文檔名稱。第一個表由兩列組成:id和username。第二個由三列組成:id,userid和document_name。Laravel /雄辯查詢出錯

現在,我試圖在控制器中創建一個查詢。最理想的情況是,如果有人訪問website.com/{documentname},它會顯示所有者的用戶名。另外,只有當前登錄的用戶是文檔的所有者時纔會發生這種情況。然而,這比我想象的要困難得多。如在,我不明白我做錯了什麼。

這裏的查詢:

$user = DB::table('documents') 
      ->join('users', function($join) 
      { 
       $join->on('users.id', '=', 'documents.userid') 
        ->where('documents.userid', '=', Auth::id()) 
        ->where('documents.document_name', '=', $document_name); 
      }) 
      ->get(); 

回答

0

$document_name不在範圍內爲聯接功能:你需要經由use

$user = DB::table('documents') 
     ->join('users', function($join) use ($document_name) 
     { 
      $join->on('users.id', '=', 'documents.userid') 
       ->where('documents.userid', '=', Auth::id()) 
       ->where('documents.document_name', '=', $document_name); 
     }) 
     ->get(); 

編輯將它傳遞到封閉

因爲WHERE條件適用於基表,而不適用於JOIN:

$user = DB::table('documents') 
     ->join('users', function($join) { 
      $join->on('users.id', '=', 'documents.userid') 
     }) 
     ->where('userid', '=', Auth::id()) 
     ->where('document_name', '=', $document_name); 
     ->get(); 
+0

好了,現在,如果我做'{{$用戶>用戶名}}'我得到'試圖讓非object' – User183849481 2014-08-30 10:26:37

+0

財產啓用'配置/ database.php'數據庫日誌查看實際正在構建的SQL查詢 – 2014-08-30 10:33:39

+0

'select * from documents內部用戶加入users.id = documents.id和documents.userid ='1'和documents.document_name ='testdoc'' – User183849481 2014-08-30 10:42:16

2
**Try this query :** 



$user = DB::table('documents') 
    ->leftJoin('users', 'users.id', '=', 'documents.userid') 
    ->where('documents.userid', '=', Auth::id()) 
    ->where('documents.document_name', '=', $document_name); 
    ->get();