在 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)