Laravel Eloquent выберите группу использования - PullRequest
0 голосов
/ 10 января 2019

Когда я запрашиваю базу данных, я получаю нужные результаты.

 $data['jobtypes'] = User::Select('jobtype_search', DB::raw('count(jobtype_search) as jobs'))->
        Where('jobtype_search', '<>', '')
            ->GroupBy('jobtype_search')
            ->get();

Однако, когда я не хочу продолжать вызывать базу данных для каждого запроса. Вместо этого я вызываю базу данных один раз, чтобы получить необходимую мне часть данных, а затем запрашиваю ее.

$user = User::whereBetween('created_at', [$start_date, $end_date])->get();

Когда я пытаюсь

 $data['jobtype_search'] =$user->Select('jobtype_search', DB::raw('count(jobtype_search) as jobs'))->
        Where('jobtype_search', '<>', '')
            ->GroupBy('jobtype_search')
            ->get();

Я получаю method select not found ошибку.

Что я должен изменить, чтобы мой запрос работал?

1 Ответ

0 голосов
/ 10 января 2019

Переменная $user в вашем примере - это набор результатов (коллекция Laravel) запроса, но вы пытаетесь использовать его в качестве запроса.

Это будет работать (другой запрос):

$data['jobtype_search'] = User::whereBetween('created_at', [$start_date, $end_date])
    ->Select('jobtype_search', DB::raw('count(jobtype_search) as jobs'))
    ->Where('jobtype_search', '<>', '')
    ->GroupBy('jobtype_search')
    ->get();

Или, если вы хотите сделать это на наборе результатов, вы можете сделать это с помощью методов сбора на наборе результатов:

$data['jobtype_search'] = $user
    ->filter(function ($item) {
        return $item->jobtype_search !== '';
    })
    ->groupBy('jobtype_search')
    ->map(function ($item, $jobTypeSearch) {
        return [
            'jobtype_search' => $jobTypeSearch,
            'jobs' => $item->count(),
        ];
    })
...