Edited для ясности:Refining Мой Eloquent запрос (Laravel)
мне нужен какой-то способ для этого запроса, чтобы возвращать только отдельные course_ids в
->wherein('course_id', $array)
часть запроса. Он получает общее количество завершенных курсов, но если пользователь закончил курс более одного раза, он подсчитывает его по отношению к общей сумме. Поэтому, если вы хотите узнать, сколько студентов прошли курс, номер будет отключен, если студент закончил курс более одного раза.
public function report_count(){
$array = \Session::get('course_report')['course'];
return $this->hasOne('Tracking', 'roster_id')
->selectRaw('roster_id, count(*) as aggregate')
->where('status', 1)
->wherein('course_id', $array)
->groupBy('roster_id');
Я попытался добавить groupBy ('course_id') в конце, но он не работает.
Невозможно создать эту статистику в cronjob? –
Это проблема памяти? Тайм-аут? Вы можете разбить запросы или предварительно обработать их через cron. Вы используете debugbar, чтобы узнать, как выглядит ваш запрос? – Blake
Проблема с памятью в первую очередь. Я поднял память, и теперь я считаю, что это время. У нас уже много cronjobs, но я мог бы проверить со старшим разработчиком, чтобы узнать, есть ли у него какие-либо идеи по их запуску. Я использую debugbar, запрос для списка в порядке, затем он выплескивает n + 1 запросов для каждого из этих отношений. Я попытался загрузить запрос, но он просто меняет значение на 0 для каждого из завершенных курсов. –