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

如何在Livewire的updatedDiagnoses方法中获取复选框的$row->name并存入数组?

解决方案

你可以直接利用组件中已有的$diagnosisList集合,通过勾选项的id匹配到对应的name,再维护存储名称的数组,具体实现如下:

1. 定义组件属性

首先确保你的Livewire组件中已经声明了必要的属性:

public $diagnosisList; // 已有的诊断列表数据
public $diagnoses = []; // 绑定复选框的数组
public $selectedDiagnosisNames = []; // 用于存储选中的诊断名称的数组

2. 实现updatedDiagnoses方法

在updatedDiagnoses方法中,通过id从$diagnosisList中匹配对应的诊断项,再根据勾选状态更新名称数组:

public function updatedDiagnoses($value, $id)
{
    // 从诊断列表中找到对应ID的项(如果是Eloquent集合,用find更高效)
    $diagnosis = collect($this->diagnosisList)->firstWhere('id', $id);
    
    if (!$diagnosis) {
        return; // 找不到对应项则直接返回
    }

    if ($value) {
        // 勾选时添加名称,同时去重避免重复
        if (!in_array($diagnosis->name, $this->selectedDiagnosisNames)) {
            $this->selectedDiagnosisNames[] = $diagnosis->name;
        }
    } else {
        // 取消勾选时移除对应名称
        $key = array_search($diagnosis->name, $this->selectedDiagnosisNames);
        if ($key !== false) {
            unset($this->selectedDiagnosisNames[$key]);
            // 重新索引数组,避免出现空索引
            $this->selectedDiagnosisNames = array_values($this->selectedDiagnosisNames);
        }
    }
}

优化提示

如果$diagnosisList是Eloquent Collection(比如从数据库查询的结果),可以用find()方法替代firstWhere(),效率更高:

$diagnosis = $this->diagnosisList->find($id);

这种方式不需要依赖前端的data-name属性,直接从后端数据源获取名称,更安全可靠,避免前端数据篡改的风险。

内容的提问来源于stack exchange,提问作者Md. Shamvil Hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:35:16