2016-09-14 4 views
0

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') в конце, но он не работает.

+0

Невозможно создать эту статистику в cronjob? –

+0

Это проблема памяти? Тайм-аут? Вы можете разбить запросы или предварительно обработать их через cron. Вы используете debugbar, чтобы узнать, как выглядит ваш запрос? – Blake

+0

Проблема с памятью в первую очередь. Я поднял память, и теперь я считаю, что это время. У нас уже много cronjobs, но я мог бы проверить со старшим разработчиком, чтобы узнать, есть ли у него какие-либо идеи по их запуску. Я использую debugbar, запрос для списка в порядке, затем он выплескивает n + 1 запросов для каждого из этих отношений. Я попытался загрузить запрос, но он просто меняет значение на 0 для каждого из завершенных курсов. –

ответ

0

Исправлено. Измененный запрос

return $this->hasOne('Tracking', 'roster_id') 
     ->selectRaw('roster_id, count(distinct course_id) as aggregate') 
     ->where('status', 1) 
     ->wherein('course_id', $array) 
     ->groupBy('roster_id'); 

за @Robin R предложение, я пошел на поиски способов использовать SQL в моем selectRaw запросе вместо того, чтобы пытаться это красноречивое путь. Спасибо всем, кто помог мне провести мозговой штурм, хотя этот.

+0

Приятно слышать, что это помогло! отметьте свой собственный ответ как решенный. – Robin

Смежные вопросы