簡體   English   中英

Laravel ManyToMany檢索數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM