Laravel добавить условие where в DB :: raw count - PullRequest
0 голосов
/ 13 июля 2020

У меня есть таблица с именем project_cases, и у нее есть дочерняя таблица defects.

Я создал таблицу данных и хочу заполнить ее данными project_cases, но прямо сейчас мне нужно чтобы добавить другие данные в мой объект запроса, которые подсчитывают, сколько дефектов связано с конкретным project_cases и где его статус не resolved или закрытый . I'm not sure how to use DB :: raw` запрос и прямо сейчас его ошибки выдачи. Ниже мой код:

Запрос кейса:

public function index($proj_id)
{
    $cases = ProjectCase::join('projects', 'projects.id', '=', 'project_cases.project_id')
                        ->join('units', 'projects.id', '=', 'units.project_id')
                        ->join('defects', 'defects.case_id', '=', 'project_cases.id')
                        ->where('projects.id', $proj_id)
                        ->select([
                            'projects.id',
                            'units.unit_no',
                            'project_cases.status',
                            'project_cases.created_at',
                            \DB::raw("count(defects.id) as unresolvedDefectsCount whereNot defects.status='resolved' and whereNot defects.status='closed'"), //Not Working
                        ])->get();
    dd($cases);
    return view('dev-admin.projects.cases.index', ['cases' => $cases, 'proj_id' => $proj_id]);
}

ОБНОВЛЕНИЕ:

Как я могу реализовать приведенный ниже код в запрос DB::Raw ? Это мой предыдущий код, который работает, но он не оптимизирован, так как требует выполнения запроса для каждого project_cases объекта строки

public function getDataTableCases(Request $request, $proj_id)
    {
        $cases = ProjectCase::with('project', 'unit')->where('project_id', $proj_id);
                            
        return DataTables::of($cases)
            ->addIndexColumn()
            ->addColumn('unresolvedDefectsCount', function ($row) {
                $unresolvedDefectsCount = Defect::where('case_id', $row->id)->whereNotIn('status', [DefectStatus::RESOLVED, DefectStatus::CLOSED])->count();
                return $unresolvedDefectsCount;
            })
            ->make(true);
    }
...