2016-09-26 5 views
2

Я новичок в Laravel, и я застрял в следующей проблеме: У меня есть таблица для пользователей и групп, а также таблица для их подключения. Общая задача любого пользователя может присоединиться к любой группе.Laravel count Eloquent принадлежитToMany related model

---------------------------------------------- 
| users  | groups  | user_groups | 
|--------------------------------------------| 
| id - int pk | id - pk | id - pk  | 
| name text | name  | user_id - fk | 
| email  |   | group_id - fk | 
| phone  |   | any_attr  | 
---------------------------------------------- 

У меня есть следующие модели:

class User 
{ 
    ... 
    public function groups() 
    { 
     return $this->belongsToMany(Group::class, 'user_groups')->withPivot(['is_notification_requested']); 
    } 
    ... 
} 


class Group 
{ 
    ... 
    public function users() 
    { 
     return $this->belongsToMany(User::class, 'user_groups'); 
    } 
    ... 
} 

Как получить все группы, с числом членов? Мне нужна модель группы и количество пользователей в группе.

+0

Вам нужен счет как ранее вычисленный атрибут возвращаемого объекта или он может быть рассчитан при печати значения? – Laerte

+0

Вы используете Laravel 5.2 или 5.3? – ollieread

+0

** Laerte: ** ну, его никогда не было, когда я получу значение. Мне просто нужен список групп и количество пользователей в группах по одному. Его разбиение на страницы. ** Ollieread: ** Laravel 5.3 –

ответ

2

Если вы используете Laravel 5.3, вы можете просто добавить withCount('relationship') как описано здесь: https://laravel.com/docs/5.3/eloquent-relationships#counting-related-models

Вот пример следующий код:

$groups = Group::withCount('users')->get(); 

Теперь вы можете сделать это:

foreach($groups as $group) { 
    echo $group->user_count 
} 
+0

Я не знал об этом. Это, конечно, лучшее решение. – Laerte

+0

Это новая функция 5.3. – ollieread

+0

Оба работают нормально! :) Но я думаю, я должен использовать ** withCount **. Спасибо! –

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