You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel 8的edit blade模板中实现单选按钮编辑态默认选中?

问题根源

你当前写法不生效的核心原因是:你在原生PHP的echo输出语句中嵌套了Blade模板语法{{ }}。Blade模板引擎只会解析模板文件中直接书写的语法标记,不会解析你通过PHP动态输出的字符串内的Blade语法,因此你的选中判断逻辑完全没有被执行。
另外你的代码还存在两个小问题:

  • 标签名拼写错误,<lable>应为<label>
  • label标签不需要type=text属性,该属性仅适用于input标签

解决方案

方案1:直接修改现有原生PHP写法

如果你要保留当前模板内写原生PHP查询数据库的逻辑,只需要把echo语句中的Blade语法替换为原生PHP的三元运算拼接即可,修正后的代码如下:

echo '<tr><td><input type="radio" name="track_id" value="'.$id.'" '.($ticket->track_id == $id ? 'checked' : '').' >'.$title.'</td><td><label name="tracks" value="'.$id.'">'.$type.'</label></td></tr>';

方案2:符合Laravel规范的写法(更推荐)

不建议在视图层直接写数据库连接逻辑,会导致代码耦合度高难以维护,按照Laravel的MVC架构调整如下:

  1. 先在控制器中查询数据并传给视图
// 控制器的编辑方法示例
public function edit($ticketId)
{
    $ticket = \App\Models\Ticket::findOrFail($ticketId);
    // 查询track表数据
    $tracks = \DB::table('track')->get(['id', 'track_title', 'track_type']);
    return view('你的编辑视图名', compact('ticket', 'tracks'));
}
  1. 视图文件直接使用Blade语法遍历渲染,不需要写任何原生PHP和数据库连接代码
<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
        <div class="form-group">
            <table border="1">
                <tr>
                    <th><strong>Title</strong></th>
                    <th><strong>Type</strong></th>
                </tr>
                @foreach($tracks as $track)
                <tr>
                    <td>
                        <input type="radio" name="track_id" value="{{ $track->id }}" {{ $ticket->track_id == $track->id ? 'checked' : '' }}>
                        {{ $track->track_title }}
                    </td>
                    <td>
                        <label name="tracks" value="{{ $track->id }}">{{ $track->track_type }}</label>
                    </td>
                </tr>
                @endforeach
            </table>
        </div>
    </div>
</div>

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:45:00