[英]Laravel ManyToMany retrieving data
我是Laravel的新手,为与人际关系打交道而挣扎。
我有2张桌子:成员组
和数据透视表:member_group
一个成员可以属于多个组,一个组可以具有多个成员。
编辑成员时,会为组创建复选框。
我需要将成员已经拥有的标记为“已检查”
我的编辑方法:
public function edit($id)
{
$cities = City::orderBy('city_name')->pluck('city_name', 'city_id');
$member = Member::findOrFail($id);
$groups = Group::all();
return view('members.edit', compact('member', 'cities', 'groups'));
}
在我的edit.blade中:
@foreach($groups as $group)
<?php $exists = $member->groups()->where('groups.group_id', $member->group_id); ?>
@if($exists)
<input type="checkbox" name="groups[]" value="{{ $group->group_id }}" checked> {{ $group->group_name }}
@else
<input type="checkbox" name="groups[]" value="{{ $group->group_id }}"> {{ $group->group_name }}
@endif
....
尽管该成员不属于所有组,但选中了所有复选框。
看这篇文章: Stackoverflow文章我尝试了他们在那里提供的几乎所有内容,但只有错误。 唯一有效的方法是:$ exists = $ member-> groups-> contains($ group-> group_id);
不知道是否浪费,这是唯一可行的方法。
我认为,在您的刀片中$exists = $member->groups()->where('groups.group_id', $member->group_id);
您应该使用group.group_id
而不是groups.group_id
,还应该使用first()
方法。
$exists = $member->groups()->where('group.group_id', $member->group_id)->first();
你可以试试这个吗?
$member = Member::findOrFail($id)->with(['groups'=>function($query){
$query->selectRaw('groups.group_id');
}])->first();
在刀片中:
$exists = $member->groups()->whereIn('groups.group_id', $member->groups)->first();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.