Php Laravel/有说服力的提问出错了

Php Laravel/有说服力的提问出错了,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我有两个表,一个是用户表,一个是文档名表。第一个表由两列组成:id和username。第二个由三列组成:id、userid和document\u name 现在,我试图在控制器中创建一个查询。理想情况下,如果有人访问website.com/{documentname},它会显示所有者的用户名。此外,只有当前登录的用户是文档的所有者时,才会发生这种情况。然而,事实证明,这比我想象的要困难得多。就像我的朋友一样,我看不出我做错了什么 问题是: $user = DB::table('documents

我有两个表,一个是用户表,一个是文档名表。第一个表由两列组成:id和username。第二个由三列组成:id、userid和document\u 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();

$document\u 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条件适用于基表,而不适用于联接:

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

好的,现在如果我做
{{$user->username}
I get
尝试获取非对象的属性
启用数据库登录
config/database.php
查看实际生成的SQL查询
select*from documents internal join users.id=documents.id和documents.userid='1'和documents.document\u name='testdoc'
所以您真的应该在联接外部应用
where
子句
  **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();