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

Laravel遍历集合报错:Property does not exist及编辑表单数据问题

问题分析与解决方案

核心错误点

  1. 路由模型绑定误用:控制器参数$id是PenerimaanHadiahSponsor模型实例,而非数字ID。用Anak::find($id)时,Laravel会将模型实例转换为查询条件,最终用PenerimaanHadiahSponsor的主键去匹配Anak的主键,这不符合业务关联逻辑(应该通过id_anak外键关联)。
  2. 数据查询逻辑错误:你需要的是所有Anak的列表用于下拉选择,而非仅查询与当前PenerimaanHadiahSponsor主键相同的Anak记录。

修正后的控制器代码

public function edit(PenerimaanHadiahSponsor $penerimaan)
{
    // 路由模型绑定已直接实例化当前记录,无需再次调用find
    $collection = $penerimaan;
    // 获取所有Anak数据用于下拉选项
    $dataanak = Anak::all();
    // 获取所有奖品类型数据
    $datatp = TipeHadiahSponsor::all();

    return view('sponsor.penerimaan.updatetrx', compact('collection', 'dataanak', 'datatp'));
}

修正后的视图代码(添加默认选中逻辑)

<div class="mb-3">
    <label class="form-label" for="basic-form-gender">Pilih Anak</label>
    <select class="form-select" id="basic-form-gender" aria-label="Default select example" name="id_anak">
        <option>Pilih Anak yg Dapat Hadiah</option>
        @foreach ($dataanak as $dtanak)
            <option value="{{ $dtanak->id }}" {{ $collection->id_anak == $dtanak->id ? 'selected' : '' }}>
                {{ $dtanak->fullname }}
            </option>
        @endforeach
    </select>
</div>

补充优化(模型关联)

如果你的PenerimaanHadiahSponsor模型和Anak模型已定义关联(推荐做法):

// app/Models/PenerimaanHadiahSponsor.php
public function anak()
{
    // 假设外键字段是id_anak,对应Anak模型的主键id
    return $this->belongsTo(Anak::class, 'id_anak');
}

后续可以直接通过$collection->anak->fullname获取当前关联的Anak信息,无需额外查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:35:11