Laravel / Eloquent查询出错了

时间:2014-08-30 10:10:41

标签: php mysql sql laravel eloquent

我有两个表,一个是用户,一个是文档名。第一个表由两列组成:id和username。第二个包含三列:id,userid和document_name。

现在,我正在尝试在控制器中创建一个查询。理想情况下,如果有人访问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();

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

$document_name不在join函数的范围内:您需要通过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();