Laravel - 表单输入 - 一对多关系的多选

2022-08-30 14:58:32

我正在构建的应用程序中的要求之一是表单输入,该表单输入为单个字段接收不同数量的项。例如,我玩的运动是(“足球”,“网球”,“槌球”)。

人们可以玩的运动数量有限(可以说),因此这些项目应该从表单输入的“下拉列表”类型列表中选择。

此表单的下游将是两个具有一对多关系的表。因此,从上面看,“user”表将有一行,而“user_sports”表将有三行。然后,这些将通过用户表中的 id 字段进行链接。


我无法在文档中找到可以实现的功能(也许我没有搜索正确的东西)。以下是我找到的最接近的,但仅用于从下拉列表中选择单个项目。

http://laravel.com/docs/html#drop-down-lists


有没有一种解决方法可以让我使用Laravel框架启动并运行这个表单元素?

或者,是否有其他方法可以在不损害用户体验的情况下实现此类功能?


答案 1

我同意user3158900,我只在使用它的方式上略有不同:

{{Form::label('sports', 'Sports')}}
{{Form::select('sports',$aSports,null,array('multiple'=>'multiple','name'=>'sports[]'))}}

但是,根据我的经验,选择的第三个参数只是一个字符串,因此为了重新填充多选的数据,我不得不做这样的事情:

<select multiple="multiple" name="sports[]" id="sports">
@foreach($aSports as $aKey => $aSport)
    @foreach($aItem->sports as $aItemKey => $aItemSport)
        <option value="{{$aKey}}" @if($aKey == $aItemKey)selected="selected"@endif>{{$aSport}}</option>
    @endforeach
@endforeach
</select>

答案 2

@SamMonk你的技术很棒。但是您可以使用laravel表单助手来执行此操作。我有客户和狗的关系。

在控制器上

$dogs = Dog::lists('name', 'id');

在客户创建视图上,您可以使用。

{{ Form::label('dogs', 'Dogs') }}
{{ Form::select('dogs[]', $dogs, null, ['id' => 'dogs', 'multiple' => 'multiple']) }}

第三个参数接受数组列表。如果在模型上定义关系,则可以执行以下操作:

{{ Form::label('dogs', 'Dogs') }}
{{ Form::select('dogs[]', $dogs, $customer->dogs->lists('id'), ['id' => 'dogs', 'multiple' => 'multiple']) }}

Laravel 5.1 更新

列表方法现在返回一个集合。升级到 5.1.0

{!! Form::label('dogs', 'Dogs') !!}
{!! Form::select('dogs[]', $dogs, $customer->dogs->lists('id')->all(), ['id' => 'dogs', 'multiple' => 'multiple']) !!}

推荐