Сохранить имя вместо идентификатора из выбранного компонента в коллективе laravel - PullRequest
0 голосов
/ 19 июня 2019

Я хочу сохранить название отдела в таблице сотрудников, в компоненте выбора он отображает имя, но сохраняет идентификатор, поэтому я думаю, что проблема в нем.

Это выбранный компонент:

{{Form::select('nombre_dep', $departamentos, null, array('class'=>'form-control', 'placeholder'=>'Asignar departamento'))}}

В моем контроллере у меня есть это для возврата к виду:

$departamentos = departamento::pluck('nombre_dep', 'id');

В модели для работника у меня есть это для отношения:

public function departamentos(){
        return $this->belongsTo('App\departamentos');
}

Я ожидаю сохранить в этом поле, например: production вместо 1, который может быть идентификатором отдела

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Выбранный ответ правильный, но не дает объяснений.

Проблема заключается в том, что вы создаете свою форму LaravelCollective :: select, чтобы в следующем запросе было отправлено целое число id. Вы можете убедиться в этом, просмотрев источник элемента Form в HTML-файле вашего рендеринга. В настоящее время это будет выглядеть так:

<select class="form-control" name="nombre_dep">
  <option selected="selected" value="">Asignar departamento</option>
  <option value="1">Production</option>
  <option value="2">Department 2</option>
  <option value="3">Department 3</option>
</select>

поэтому, когда действие запускается с (скажем) выбранной опцией 1, ваш сгенерированный запрос просто имеет "nombre_dep" => "1".

Вам необходимо структурировать форму с желаемым значением параметра. как

<select class="form-control" name="nombre_dep">
  <option selected="selected" value="">Asignar departamento</option>
  <option value="Production">Production</option>
  <option value="Department 2">Department 2</option>
  <option value="Department 3">Department 3</option>
</select>

Для этого передайте переменную $departamentos из вашего контроллера следующим образом:

$departamentos = array('Production' => 'Production', 'Department 2' => 'Department 2', 'Department 3' => 'Department 3');

и простой способ сделать это (в ответе https://stackoverflow.com/a/56673741/8093282 указано):

$departamentos = departamento::pluck('nombre_dep', 'nombre_dep');
0 голосов
/ 19 июня 2019

Выполните извлечение, указав в параметре key (второй параметр) значение field, из которого вы хотите получить значение для использования в атрибуте value select.

* 1006.*

Затем, когда вы передаете массив $departamentos в Коллектив Laravel select(), он создаст элемент <option> для каждого элемента массива, используя массив key в качестве атрибута value и массив value как тег содержимого опции.

{{ Form::select('nombre_dep', $departamentos) }}
...