That's a nice trick
// I have course and subscriber where subscriber can view a courses and other models, all are viewables.
// the course model relation:
public function voters()
{
return $this->morphToMany('Moubarmij\Models\Subscriber', 'votables');
}
// the subscriber model relation:
public function views()
{
return $this->morphedByMany('Moubarmij\Models\Video', 'viewables');
}
// to get the number of votes of the course:
// add this scope to the course model:
public function scopeWithNumberOfVotes($query)
{
return $query->with(['voters' => function($q)
{
return $q->select(DB::raw('count(votables_id) as number_of_votes'))->groupBy('votables_id');
}]);
}
// usage when queuing the course call this scope:
// ...->withNumberOfVotes()...