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::raw
和 whereRaw
表达式执行此操作时。它抛出一个错误。
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();
我正在尝试执行一个查询,我需要计算 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::raw
和 whereRaw
表达式执行此操作时。它抛出一个错误。
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();