在 laravel 集合中保存 select 组件的名称而不是 ID

Save name instead of id from select component in laravel collective

我想在table员工中保存部门名称,在select组件中它显示名称但保存id,所以我认为问题在于它。

这是 select 组件:

{{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,这可能是部门的 ID

执行在 key 参数(第二个参数)中指定的 pluck,field 您希望从中获取要在 value 属性中使用的值 select.

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

然后当您将 $departamentos 数组传递给 Laravel 集体 select() 时,它会为每个数组元素创建一个 <option> 元素,使用数组 key 作为 value 属性和数组 value 作为选项标签内容。

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

所选答案正确,但未提供任何解释。

问题在于您创建了 LaravelCollective Form::select,因此整数 id 会在随后的请求中发送。您可以通过查看呈现的 blade 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>

so when the action is triggered with (say) option 1 selected, your generated request simply has "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://whosebug.com/a/56673741/8093282 所述):

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