如何使用从 Laravel 数据库中获取的数据检查复选框

问题描述 投票:0回答:1

我在检索数据并使用它来检查 Laravel 中的复选框时遇到问题。我希望当打开编辑页面时,将根据数据库中的记录选中复选框。

编辑视图页面:

@php
$productstatus = json_decode($product-\>status);
@endphp
        
<div>
       <label for="status" class="control-label col-sm-2">Product Status</label>
        @foreach($status as $status)
                <input type="checkbox" name="status[]" value="{{$status->status}}" @if(in_array($status, $productstatus)) checked @endif> <label>{{$status->status}}</label>
            @endforeach
        </div>
<div class="clearfix"></div>

控制器页面:

public function edit(Product $product){
        $countries = Country::all();
        $status = Status::all();
        $allStatus = Product::pluck('status')->toArray();
        return view('products.edit', ['product' => $product, 'countries' => $countries, 'status' => $status, 'allStatus'=>$allStatus]);
    }

    public function update(Request $request, $id){
        $data = $request->validate([
            'name'=> 'required',
            'qty'=> 'required|numeric',
            'price'=> 'required|decimal:0,2',
            'category' => 'required',
            'country' => 'required',
            'status' => 'nullable',
            'description' => 'nullable'
        ]);

        $product = product::where('id', $id)
            ->update([ 
                'name' => $request->name,
                'qty' => $request->qty,
                'price' => $request->price,
                'category' => $request->category,
                'country' => $request->country,
                'status' => json_encode($request->input('status')),
                'description' => $request->description ]); 

        
        return redirect(route('product.index'))->with('success', 'Product has been updated Successfully!');
    }

I want that the tickboxes are ticked based on the values when the edit page is loaded

Here is the array of strings in the database

谢谢您的帮助!

我尝试将字符串更改回数组,然后再尝试将其与值进行比较,但无济于事。

php laravel eloquent laravel-blade
1个回答
0
投票

在视图文件中,您将对象

$status
与数组
$productstatus
进行比较。这不会按预期工作。您应该将
status
对象的
$status
属性与
$productstatus
数组进行比较。

@php
$productstatus = json_decode($product->status);
@endphp

<div>
    <label for="status" class="control-label col-sm-2">Product Status</label>
    @foreach($status as $status)
        <input type="checkbox" name="status[]" value="{{$status->status}}" @if(in_array($status->status, $productstatus)) checked @endif> <label>{{$status->status}}</label>
    @endforeach
</div>
<div class="clearfix"></div>

在此代码中,

@if(in_array($status->status, $productstatus)) checked @endif
检查
status
对象的
$status
属性是否在
$productstatus
数组中。它将
checked
属性添加到复选框输入(如果是)。

© www.soinside.com 2019 - 2024. All rights reserved.