Модель Laravel с несколькими значениями принадлежности, возвращающими null

#php #laravel #laravel-5

#php #laravel #laravel-5

Вопрос:

У меня следующая ситуация…

Есть пользователи, которые принадлежат группам, и есть игры, которые принадлежат группам.

Я пытаюсь получить все группы пользователей, но он возвращает NULL.

У меня установлены следующие отношения:

Пользовательская модель:

 public function groups(){
    return $this->belongsToMany('AppGroup', 'group_user');
}
  

Групповая модель:

 public function games(){
    return $this->belongsToMany('AppGame');
}

public function users(){
    return $this->belongsToMany('AppUser', 'group_user');
}
  

таблица group_user

 Schema::create('group_user', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->integer('group_id');
    $table->timestamps();
});
  

Теперь я пытаюсь получить все группы от выбранного пользователя

 $user = User::find(1);

$userGroups = $user->groups;
  

Таким образом, вместо $UserGroups, являющихся всеми группами пользователя, это NULL
(в таблице group_user есть запись, содержащая идентификаторы)

Комментарии:

1. если пользователи принадлежат многим группам, то разве в группах не должно быть много пользователей?

2. @chiliNUT Поправьте меня, если я ошибаюсь, но для этого требуется, чтобы у пользователя был group_id, который я хочу избежать, чтобы пользователи имели более одной группы

3. Для меня все выглядит правильно. Что $user->groups()->get() возвращает?

4. @PaulSpiegel Вы, сэр, мой спаситель! Не могли бы вы объяснить мне, почему это так? Кроме того, опубликуйте это как ответ, чтобы я мог пометить его как правильный 😉

5. Итак, что он возвращает?

Ответ №1:

Вы пробовали это?

 return $this->belongsToMany('AppUser', 'group_user','user_id', 'group_id');
  

Комментарии:

1. Да, я пробовал, Пол Шпигель предложил $user->groups()->get() , что сработало. Но спасибо за ваше предложение! 🙂

Ответ №2:

По предложению: Paul Spiegel

 $user->groups()->get()
  

Сработало! Спасибо 🙂