我有两个表,一个是用户,一个是文档名。第一个表由两列组成: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();
答案 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();