Laravel: как получить информацию из другой таблицы с помощью сводной таблицы?

#php #laravel #model #laravel-8 #laravel-blade

#php #laravel #Модель #laravel-8 #laravel-blade

Вопрос:

проблема в том, что у меня есть формы, и я хочу получить все их элементы.

Я создал сводную таблицу groupes, которая извлекает form_id из таблицы forms и user_id из таблицы users. но когда я пытаюсь получить информацию, я получаю следующее: попытка прочитать свойство «firstname» в bool (просмотр: /…/resources/views/groupes/list.blade.php )

В моих моделях у меня есть: Формы :

 public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function groupe()
    {
        return $this->belongsToMany(Groupe::class);
    }
 

Пользователь:

 public function forms()
    {
        return $this->hasMany(Forms::class);
    }

public function groupe()
    {
        return $this->belongsToMany(Groupe::class);
    }
 

list.blade.php ($forms соответствует 1 единственной форме, которую я сделал foreach перед всеми моими формами):

 @foreach($forms->user as $user)
  {{$user->firstname}}
@endforeach
 

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

1. $forms->user не является ни коллекцией, ни массивом. это пользовательский экземпляр, полученный из отношения belongsTo в модели Form. вот почему возникает ошибка

2. как уже упоминалось, это экземпляр модели, который вы пытаетесь выполнить, а не набор моделей… когда вы повторяете подобный объект, вы получаете его общедоступные свойства

Ответ №1:

Groupe ваша сводная таблица, которая содержит user_id и form_id. Как описано в документах, если сводная таблица не объединяет два связанных названия моделей в алфавитном порядке (должно быть form_user в этом случае), то вам необходимо указать имя таблицы, которое groupe :

 public function groupe(): BelongsToMany
{
    return $this->belongsToMany(Groupe::class, 'groupe');
}
 

И если вы хотите получить User из a form , то:

 public function getFormWithUser()
{
    $form = Form::with('groupe')->first();
}
 

* примечание: Но я немного смущен form отношением в User модели и наоборот, если это отношение Many to Many (поскольку существует groupe сводная модель), как они могут быть связаны друг с другом напрямую?