在 laravel 中 blade 编辑页面上的 Pre-selecting 值?
Pre-selecting value on edit page with blade in laravel?
我有一个问题,我想在车辆模式的编辑页面上的 select 中显示当前品牌。
select必须包含所有品牌,所以可以在编辑模型时选择其他品牌。
我的 vehicleModelsController 编辑中有这个:
$vehicle_brands = VehicleBrand::all();
$selected_vehicle_brand = VehicleBrand::first()->vehicle_brand_id;
return view('vehicleModels.edit', compact(['vehicleModel', 'vehicle_brands'], ['selected_vehicle_brand']));
在我的 edit.blade 文件中有以下内容 select:
<select class="form-control" name="vehicle_brand_id">
@if ($vehicle_brands->count())
@foreach($vehicle_brands as $vehicle_brand)
<option value="{{ $vehicle_brand->id }}" {{ $selected_vehicle_brand == $vehicle_brand->id ? 'selected="selected"' : '' }}>
{{ $vehicle_brand->brand }}</option>
@endforeach
@endif
</select>
它在编辑时工作得很好,但它不会像 selected 那样显示当前值,它显示品牌 table.
中的第一个值
我在品牌 table 中将 Brand1、Brand2、Brand3 和 Brand4 作为测试值,但无论该模型与哪个品牌相关,它都会在编辑中的 select 中显示 Brand1页。
非常感谢任何帮助!
在控制器中,您将 VehicleBrand::first()->vehicle_brand_id
的值分配给 $selected_vehicle_brand
,然后将其与 {{ $selected_vehicle_brand == $vehicle_brand->id ? 'selected="selected"' : '' }}
中的 id
字段进行比较
如果 VehicleBrand
模型上没有名为 vehicle_brand_id
的 column/field,则 VehicleBrand::first()->vehicle_brand_id
将是 null
。因此,当您比较 $selected_vehicle_brand == $vehicle_brand_id
时,它就像 null == $vehicle_brand->id
一样,对于任何 id 值都是错误的。
所以它应该是(在 Controller 中)
$selected_vehicle_brand = VehicleBrand::first()->id;
//Here we are hard coding the value to be the id of first record of VehicleBrand
//However in practice it should come from either request/route param eg: $id received via the request/route param
//Or from VehicleModel being edited eg: $vehicleModel->vehicle_brand->id
和{{ $selected_vehicle_brand == $vehicle_brand->id ? 'selected="selected"' : '' }}
在视图中
或者,如果 vehicle_brand_id
column/field 存在于 VehicleBrand
,它应该是(在 Controller 中)
$selected_vehicle_brand = VehicleBrand::first()->vehicle_brand_id;
和{{ $selected_vehicle_brand == $vehicle_brand->vehicle_brand_id ? 'selected="selected"' : '' }}
您正在比较其值的字段应该相同。
另外,如果你在 Laravel 9 上,你可以使用 @selected
blade 指令
@selected(old($vehicle_brand->id) == $selected_vehicle_brand)
我有一个问题,我想在车辆模式的编辑页面上的 select 中显示当前品牌。 select必须包含所有品牌,所以可以在编辑模型时选择其他品牌。
我的 vehicleModelsController 编辑中有这个:
$vehicle_brands = VehicleBrand::all();
$selected_vehicle_brand = VehicleBrand::first()->vehicle_brand_id;
return view('vehicleModels.edit', compact(['vehicleModel', 'vehicle_brands'], ['selected_vehicle_brand']));
在我的 edit.blade 文件中有以下内容 select:
<select class="form-control" name="vehicle_brand_id">
@if ($vehicle_brands->count())
@foreach($vehicle_brands as $vehicle_brand)
<option value="{{ $vehicle_brand->id }}" {{ $selected_vehicle_brand == $vehicle_brand->id ? 'selected="selected"' : '' }}>
{{ $vehicle_brand->brand }}</option>
@endforeach
@endif
</select>
它在编辑时工作得很好,但它不会像 selected 那样显示当前值,它显示品牌 table.
中的第一个值我在品牌 table 中将 Brand1、Brand2、Brand3 和 Brand4 作为测试值,但无论该模型与哪个品牌相关,它都会在编辑中的 select 中显示 Brand1页。
非常感谢任何帮助!
在控制器中,您将 VehicleBrand::first()->vehicle_brand_id
的值分配给 $selected_vehicle_brand
,然后将其与 {{ $selected_vehicle_brand == $vehicle_brand->id ? 'selected="selected"' : '' }}
id
字段进行比较
如果 VehicleBrand
模型上没有名为 vehicle_brand_id
的 column/field,则 VehicleBrand::first()->vehicle_brand_id
将是 null
。因此,当您比较 $selected_vehicle_brand == $vehicle_brand_id
时,它就像 null == $vehicle_brand->id
一样,对于任何 id 值都是错误的。
所以它应该是(在 Controller 中)
$selected_vehicle_brand = VehicleBrand::first()->id;
//Here we are hard coding the value to be the id of first record of VehicleBrand
//However in practice it should come from either request/route param eg: $id received via the request/route param
//Or from VehicleModel being edited eg: $vehicleModel->vehicle_brand->id
和{{ $selected_vehicle_brand == $vehicle_brand->id ? 'selected="selected"' : '' }}
在视图中
或者,如果 vehicle_brand_id
column/field 存在于 VehicleBrand
,它应该是(在 Controller 中)
$selected_vehicle_brand = VehicleBrand::first()->vehicle_brand_id;
和{{ $selected_vehicle_brand == $vehicle_brand->vehicle_brand_id ? 'selected="selected"' : '' }}
您正在比较其值的字段应该相同。
另外,如果你在 Laravel 9 上,你可以使用 @selected
blade 指令
@selected(old($vehicle_brand->id) == $selected_vehicle_brand)