调用未定义方法Illuminate \ Database \ Query \ Expression :: whereRaw()的原因是什么?

时间:2016-10-13 14:51:35

标签: php laravel eloquent laravel-5.2 query-builder

我正在尝试执行查询,我需要在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::rawwhereRaw表达式执行此操作时。它给我一个错误。

  

调用未定义的方法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提示,但是我收到了这个错误。

SC

1 个答案:

答案 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();