当值为true时复选框应勾选,Laravel集合实例报错求助
解决复选框勾选报错:Property [id] does not exist on this collection instance
嘿,这个报错我太熟啦!问题出在你对关联关系的访问上:$user->benefits是一个集合(Collection)(因为用户和福利应该是多对多的关联,一个用户可以有多个福利),不是单个的Benefit模型,所以直接用$user->benefits->id肯定会报错——集合里没有id这个属性呀!
正确的做法:检查当前福利是否在用户的福利集合中
我给你两种可行的修改方案,选哪个都可以:
方案1:直接用集合的contains()方法判断
这种写法简洁,适合小型集合:
@foreach($benefits as $benefit) <div class="form-check"> <label class="form-check-label" for="benefit_{{$benefit->id}}"> <input class="form-check-input" type="checkbox" value="{{$benefit->id}}" id="benefit_{{$benefit->id}}" name="benefit_id[]" @if($user->benefits->contains('id', $benefit->id)) checked @endif> {{$benefit->name}} </label> </div> @endforeach
方案2:提前提取用户福利ID数组(性能更优)
如果用户的福利数量比较多,提前把ID提取成数组可以避免循环中重复查询集合,效率更高:
@php // 提前取出用户所有福利的ID,转成数组 $userBenefitIds = $user->benefits->pluck('id')->toArray(); @endphp @foreach($benefits as $benefit) <div class="form-check"> <label class="form-check-label" for="benefit_{{$benefit->id}}"> <input class="form-check-input" type="checkbox" value="{{$benefit->id}}" id="benefit_{{$benefit->id}}" name="benefit_id[]" @if(in_array($benefit->id, $userBenefitIds)) checked @endif> {{$benefit->name}} </label> </div> @endforeach
额外小修复:避免ID重复
我还帮你改了复选框的id属性——原来的id="benefit_id"在循环里会重复,这会导致点击标签时可能无法正确触发复选框。现在改成benefit_{{$benefit->id}},每个复选框的ID都是唯一的,对应的label的for属性也同步修改了,交互更靠谱~
内容的提问来源于stack exchange,提问作者gwapo
相关产品推荐
相关产品推荐

