我有两个表,一个表包含用户,一个表包含其文档的名称。第一个表包含两列: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();
最佳答案
$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();