dimanche 1 octobre 2017

Count on a eager loaded relation Laravel

So I have Subject, that contains Stack, and stacks contains Question. And with every question, there is answers, and I would like to count the answers on every Stack, but I'm stuck.

This is what I'm trying to do, one of many solutions I have been fiddling with:

    $subjects = Subject::with(['stack.question', 'stack.answersCount'])->get();

    return $subjects;

The Subject model has the following relation

public function stack(){
    return $this->hasMany(Stack::class);
}

And if we take a look on the Stack model on how the relations are build:

public function question(){
    return $this->hasMany(Question::class);
}

public function answers(){
    return $this->hasMany(Answers::class);
}

public function answersCount(){
    return $this->answers()->selectRaw('answer, count(*) as aggregate')->groupBy('answer');
}

But when I return $subjects, answer_count is empty.

"answers_count": []

Its very confusing, because when I run the same query in sql, I get results.

select answer, count(*) as aggregate from `answers` where `answers`.`stack_id` in ('1', '6') group by `answer`

correct 9
wrong   4

So how can I count all answers? And group them?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire