Laravel: заполнить форму свойствами из нескольких моделей - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь построить форму для редактирования информации офисов. Эта форма создается с использованием информации, поступающей из двух моделей: Office и Address. Как вы видите на полях изображения, отмеченных 1, относится к адресной модели, поля, отмеченные 2, относятся к офисам

enter image description here

Офис имеет один адрес

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, и действительно, у нее есть свойство улицы, это означает, что отношение работает нормально.

Насколько я знаю, я не могу связать две модели с одной формой (не в HTML)

Как заполнить форму со свойствами из нескольких моделей?

Я бы не хотел создавать две формы: одну для редактирования адреса, а другую для названия офиса.

1 Ответ

0 голосов
/ 18 июня 2019

Этот вопрос старый, но вот ответ, который мне подходит.

Ваша первая строка формы:

{!! 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 и $переменные адреса будут теми, которые вы использовали в своем коде.

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