#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
сводная модель), как они могут быть связаны друг с другом напрямую?