【问题标题】:Laravel model binding for select dropdown用于选择下拉列表的 Laravel 模型绑定
【发布时间】:2018-04-11 05:08:02
【问题描述】:

我希望在我的编辑表单中选择下拉列表值。

在我的控制器中

public function edit($id)
{
    $vedit = DB::table('vehicles')->where('id', $id)->first();
    $cartype= DB::table('car_category')->pluck('cartype'); 
    return view('vehicles.edit', compact('vedit','cartype'));
}

在视图中

{{ Form::label('Vehicle Type', 'Vehicle Type') }}
<select name="vehicle_type" class="form-control">
  @foreach($cartype as $cartypes)   
  <option value="{{ $cartypes}}">{{ $cartypes}}</option>
  @endforeach
</select>

我怎样才能做到这一点?

【问题讨论】:

  • 我已经在我的控制器中尝试了代码,$categories = [''=&gt;''] + Car::pluck('cartype')-&gt;all(); return view('vehicles.edit', compact('vedit','categories'));
  • 但它也不起作用,它在视图中添加了另一个空选项
  • 试试pluck('cartype', 'id') !!
  • 不,它不工作还创建新选项为空
  • 对不起,我之前没有得到这个问题:p,你是怎么得到它的?

标签: php laravel-5


【解决方案1】:

你可以添加selected属性,如果它是这样选择的:

{{ Form::label('Vehicle Type', 'Vehicle Type') }}
<select name="vehicle_type" class="form-control">
    @foreach($cartype as $cartypes) 
        <option value="{{ $cartypes}}" {{ $cartypes == $vedit->vehicle_type ? 'selected' : ''}}>{{ $cartypes}}</option>
    @endforeach
</select>

【讨论】:

  • 我将其添加为答案以帮助其他人找到解决方案;)
【解决方案2】:

你使用的是什么版本的 Laravel?看起来你正在使用 Laravel 集体表单外观。

在这种情况下,这应该可以正常工作:

{!! Form::label('Vehicle Type', 'Vehicle Type') !!}
{!! Form::select('vehicle_type', $cartype, $vedit->vehicle_type ?: old('vehicle_type), ['class' => 'form-control']) !!}

假设$vedit-&gt;vehicle_type 是您之前存储的车辆类型。所以它会在编辑时预先选择它。在创建新的情况下,old('vehicle_type') 应该在验证失败时保留先前选择的值。

【讨论】:

  • 谢谢,我正在使用 laravel 5
  • 应该是这样的。它将显示所有选项,但将自动选择该行的选项。这就是$vedit-&gt;vehicle_type 所做的。
  • 但我猜不出为什么没有被选中
  • 尝试删除您的浏览器缓存和/或尝试使用其他浏览器。一些浏览器具有激进的缓存
  • 在我的表格中'{!! Form::model($vedit, ['method' => 'PATCH','route' => ['vehicles.update', $vedit->id]]) !!}`
【解决方案3】:

通过调用pluck(),已经为汽车类型返回了一个值数组。

所以只需像这样在 Laravel Collective 中使用它:

{!! Form::label('Vehicle Type', 'Vehicle Type') !!}
{!! Form::select('vehicle_type', $cartype, null, ['class' => 'form-control']) !!}

注意,我也改变了你的双花括号。双花括号转义输出 - 鉴于 Form 外观返回 HTML 代码,您希望它不转义。

更多关于使用 Laravel Collective 生成​​下拉列表的信息; https://laravelcollective.com/docs/5.4/html#drop-down-lists

编辑如果表单验证失败,则显示当前选择的值和旧值:

{!! Form::label('Vehicle Type', 'Vehicle Type') !!}
{!! Form::select('vehicle_type', $cartype, old('vehicle_type', $vedit->vehicle_type), ['class' => 'form-control']) !!}

【讨论】:

  • 感谢您的代码,但在我的编辑表单中未选择该值。会有什么问题?
  • 什么意思?您是说下拉列表没有值吗?
  • 下拉显示值,但我希望选择特定行的值
  • 查看我的编辑以了解如何执行此操作,并提供一个选项,以便在表单验证失败时使用旧输入。
  • 在视图刀片`{!! Form::model($vedit, ['method' => 'PATCH','route' => ['vehicles.update', $vedit->id]]) !!}
    {!! Form::label('Vehicle Type', 'Vehicle Type') !!} {!! Form::select('vehicle_type', $cartype, old('vehicle_type', $vedit->vehicle_type), ['class' => 'form-control']) !!}
    `
猜你喜欢
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2014-12-10
  • 1970-01-01
相关资源
最近更新 更多