Laravel принадлежность к множеству отношений возвращает идентификатор вместо модели. - PullRequest
1 голос
/ 25 мая 2020

Я изучаю laravel, но у меня возникла проблема, и я не могу понять ее правильно. У меня две модели:

Модель «Группа»:

 Schema::create('groups', function (Blueprint $table) {
        $table->increments('id')->unique();
        $table->string('name')->unique();
        $table->text('description')->nullable();
        $table->string('picture')->nullable();
        $table->timestamps();
    });

и модель «Пользователь»:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamp('email_verified_at')->nullable();
        $table->timestamps();
        $table->rememberToken();
    });

Эти модели должны иметь функцию «многие ко многим». отношения, поэтому я создал сводную таблицу с именем 'group_user':

Schema::create('group_user', function (Blueprint $table) {
        $table->increments('id');

        $table->integer('group_id')->unsigned();
        $table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade');

        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

        $table->timestamps();
    });

Затем я определил отношение «многие ко многим»:

В модели «Группа»:

 public function members()
{
    return $this->belongsToMany('App\User', 'group_user', 'group_id', 'user_id')->withTimestamps();
}

В модели «Пользователь»:

public function groups() {
    return $this->belongsToMany('App\Group', 'group_user', 'user_id', 'group_id')->withTimestamps();
}

В моей базе данных у меня есть сводная запись, которая связывает группу 1 с пользователем 1:

+----+----------+---------+------------+------------+
| id | group_id | user_id | created_at | updated_at |
+----+----------+---------+------------+------------+
|  1 |        1 |       1 | NULL       | NULL       |
+----+----------+---------+------------+------------+

Итак пока все хорошо, но когда я пытаюсь распечатать членов группы 1:

@foreach($group->members() as $user)
   <p>{{ $user->first_name }}</p>
@endforeach

, я получаю эту ошибку:

Trying to get property 'first_name' of non-object

Когда я печатаю объект пользователя, подобный этому

 @foreach($group->members() as $user)
   <p>{{ $user }}</p>
@endforeach

Я получаю результат 1 , который является user_id члена. Кто-нибудь может указать, где я напортачил? Я смотрел на это часами, но просто не вижу. Заранее спасибо!

1 Ответ

1 голос
/ 26 мая 2020

попробуйте $group->members вместо $group->members(). Потому что $group->members() возвращает построитель отношений.

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