保存名称而不是Laravel集合中选择组件的ID

时间:2019-06-19 17:45:06

标签: laravel html-select laravelcollective

我想在表employees中保存一个部门的名称,在选择组件中它显示名称但保存id,所以我认为问题出在其中。

这是选择组件:

{{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而不是可能是部门ID的1

2 个答案:

答案 0 :(得分:1)

选择的答案是正确的,但没有提供解释。

问题是您创建了LaravelCollective Form :: select,因此在随后的请求中发送了整数id。您可以通过查看呈现的刀片HTML中Form元素的来源来验证这一点。当前看起来像:

<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');

答案 1 :(得分:0)

执行key参数(第二个参数)中指定的抽取操作,您要从中获取{{1}的field属性中要使用的值的value }}。

select

然后,当您将$departamentos = departamento::pluck('nombre_dep', 'nombre_dep'); 数组传递给Laravel集合$departamentos时,它将为每个数组元素创建一个select()元素,并使用数组<option>作为{{ 1}}属性和数组key作为选项标签内容。

value