Пытаюсь построить форму для редактирования информации об офисах. Эта форма построена с использованием информации, поступающей из двух моделей: Office и Address. Как вы видите на изображении поля, отмеченные цифрой 1, относятся к модели адреса, поля, отмеченные цифрой 2, относятся к офисам.
У офиса один адрес
office.php
public function address()
{
return $this->hasOne('App\Address');
}
Адрес принадлежит офису
address.php
public function office()
{
return $this->belongsTo('App\Office');
}
Теперь, чтобы заполнить окно редактирования, мне нужно привязать две модели к форме!
Я пробовал это:
{!! Form::model($element, ['method'=>'PATCH', 'action'=> ['AdminofficeController@update', $element->slug ],'files'=>true]) !!}
{!!Form::label('image', 'Upload a Featured Image') !!}
{!!Form::file('image', null, array('class' => 'form-control'))!!}
...here fields from office model...
{!! Form::label('street', 'Street:', array('class' => 'pt-3'))!!}
{!! Form::text($element->address->street, null, array('class'=>'form-control' )) !!}
... here other fields ...
{!!Form::submit('Edit Büro', array('class' => 'btn btn-success btn-block')) !!}
{!!Form::close() !!}
Но я получаю следующую ошибку:
Свойство [улица] не существует в этом экземпляре коллекции. (Вид: C: \ laragon \ www \ domain \ resources \ views \ dashboard \ bueros \ edit.blade.php)
Эта строчка не решает проблему
{!! Form::text($element->address->street, null, array('class'=>'form-control' )) !!}
У меня есть коллекция var_dump te, и действительно, у нее есть свойство street, это означает, что отношение работает нормально.
Насколько я знаю, я не могу привязать две модели к одной форме (не в HTML)
Как мне заполнить форму свойствами, полученными из нескольких моделей?
Я бы не хотел создавать две формы: одну для редактирования адреса, а другую - для названия офиса.
@Bogdan, спасибо за ответ. Я изменил структуру модели, теперь она получает экземпляр адреса






Это старый вопрос, но вот ответ, который мне подходит.
Ваша первая строка формы:
{!! Form::model($element, ['method'=>'PATCH', 'action'=> ['AdminofficeController@update', $element->slug ],'files'=>true]) !!}
следует изменить на:
{!! Form::model($building->toArray() + $address->toArray(), ['method'=>'PATCH', 'action'=> ['AdminofficeController@update', $element->slug ],'files'=>true]) !!}
Я не уверен на 100%, что требуется -> toArray (), но это работает для форм, которые у меня есть с несколькими моделями, которые я хочу заполнить автоматически.
Примечание: переменные $ building и $ address будут такими, какие вы использовали в своем коде.
Ошибка фактически указывает на источник вашей проблемы. Отношение
$element->addressдолжно содержать экземпляр моделиAddressв соответствии с вашим определением, а не экземплярCollection, как указывает ошибка. Возможно, вы захотите узнать, почему это так.