Laravel遍历集合报错:Property does not exist及编辑表单数据问题
问题分析与解决方案
核心错误点
- 路由模型绑定误用:控制器参数
$id是PenerimaanHadiahSponsor模型实例,而非数字ID。用Anak::find($id)时,Laravel会将模型实例转换为查询条件,最终用PenerimaanHadiahSponsor的主键去匹配Anak的主键,这不符合业务关联逻辑(应该通过id_anak外键关联)。 - 数据查询逻辑错误:你需要的是所有
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
相关产品推荐
相关产品推荐

