Call to undefined method Illuminate\Database\Query\Expression::whereRaw() 的原因是什么?

What's the cause of Call to undefined method Illuminate\Database\Query\Expression::whereRaw()?

我正在尝试执行一个查询,我需要计算 approvals_document 中值为 1 的 isApprove 列。这是我在 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::rawwhereRaw 表达式执行此操作时。它抛出一个错误。

Call to undefined method 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 提示,但我遇到了这个错误。

你的括号搞错了。在 select 之后需要一个额外的,而不是在 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();