2014-08-30 168 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();