我正在尝试执行查询,我需要在isApprove
中将approvals_document
列计为值1。我在这里是如何在SQL查询中完成的。
SELECT documents.id, documents.isApprove,
(SELECT COUNT(*) FROM approvals_document WHERE approvals_document.isApprove = 1 and approvals_document.document_id = documents.id) as approvedBy
FROM documents;
输出:
id | isApprove | approvedBy
96 0 3
当我在Laravel中使用DB::raw
和whereRaw
表达式执行此操作时。它给我一个错误。
调用未定义的方法Illuminate \ Database \ Query \ Expression :: whereRaw()
这是我用Laravel方式表演的方式。
public function count()
{
$count = DB::table('documents')
->select('documents.id', 'documents.isApprove', DB::raw('COUNT(FROM approvals_document) as approvedBy')
->whereRaw('approvals_document.isApprove = 1 and approvals_document.document_id = documents.id'))
->get();
dd($count);
}
任何帮助我是如何得到这个问题的?任何帮助将不胜感激!
更新:我使用左连接跟踪了aynber提示,但是我收到了这个错误。
答案 0 :(得分:0)
你的括号混淆了。选择后需要额外的一个,而不是在你的whereRaw之后:
$count = DB::table('documents')
->leftJoin('approvals_document','documents.id','=','approvals_document.document_id')
->select('documents.id', 'documents.isApprove', DB::raw('COUNT(approvals_document.*) as approvedBy')) // Close your DB::raw and your select here
->whereRaw('approvals_document.isApprove = 1 and approvals_document.document_id = documents.id')
->get();