You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel更新表单多复选框数据回显实现方法问询

解决Blade表单复选框回显选中状态的问题

嘿,这个场景太常见了,我来给你一步步说明怎么实现:

首先,先确认你的Student模型已经正确处理hobbies字段的类型转换——因为数据库里存的是JSON格式的数组,你需要让Eloquent自动把它转成PHP数组。如果还没设置,在Student模型里加上这段代码:

protected $casts = [
    'hobbies' => 'array',
];

这样从数据库取出$student->hobbies时,它会是一个PHP数组,而不是字符串,后续的判断才能生效。

接下来修改你的Blade表单代码,针对每个复选框,判断当前选项的value是否存在于$student->hobbies数组中,如果存在就添加checked属性。这里有两种写法可选:

方法一:使用传统的条件判断(兼容所有Laravel版本)

把每个复选框的代码改成这样:

<div class="form-group row">
    <label class="col-md-3 col-form-label form-control-label" for="input-description">Hobbies</label>
    <div class="col-md-9">
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="football" {{ in_array('football', $student->hobbies) ? 'checked' : '' }}> Football &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="basketball" {{ in_array('basketball', $student->hobbies) ? 'checked' : '' }}> Basketball &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="table_tennis" {{ in_array('table_tennis', $student->hobbies) ? 'checked' : '' }}> Table Tennis &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="hockey" {{ in_array('hockey', $student->hobbies) ? 'checked' : '' }}> Hockey &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="others" {{ in_array('others', $student->hobbies) ? 'checked' : '' }}> Others
    </div>
</div>

方法二:使用Laravel 9+的@checked指令(更简洁)

如果你用的是Laravel 9或更高版本,可以用官方提供的@checked指令让代码更清爽:

<div class="form-group row">
    <label class="col-md-3 col-form-label form-control-label" for="input-description">Hobbies</label>
    <div class="col-md-9">
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="football" @checked(in_array('football', $student->hobbies))> Football &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="basketball" @checked(in_array('basketball', $student->hobbies))> Basketball &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="table_tennis" @checked(in_array('table_tennis', $student->hobbies))> Table Tennis &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="hockey" @checked(in_array('hockey', $student->hobbies))> Hockey &nbsp;
        <input type="checkbox" name="hobbies[]" class="form-control-label" value="others" @checked(in_array('others', $student->hobbies))> Others
    </div>
</div>

原理很简单:in_array函数检查当前爱好是否在学生的爱好数组里,如果是,就输出checked属性(或者通过@checked指令自动添加),这样页面加载时对应的复选框就会处于选中状态了。

内容的提问来源于stack exchange,提问作者Saurav Shrestha

火山引擎 最新活动