我試圖用一個多對多的關係來完成以下工作流程:Laravel嵌套的ForEach在雄辯的收藏
有許多章節和許多用戶。每個用戶都有他們已解鎖的部分。例如,如果有兩個部分(第I部分和第II部分),第一個用戶Jim(
id = 1
)已解鎖X部分,第二個用戶Debbie(id = 2
)已解鎖第I部分和第II部分。爲了實現這一點,我有三個數據庫,一個標準Laravel
users
,則sections
存儲該部分的數據(id = 1
爲第I和id = 2
爲第二節),然後user_section
,我已成功地被用作聯合表格User
和Section
之間的表格。該連接表是用戶和部分混合的地方,如果在該部分中給定user_id
的條目,則相應的section_id
被解鎖。
我有以下功能應該是1.獲取視圖的所有部分和2.讓我知道哪些部分是由用戶解鎖。
問題是我得到重複部分顯示出來,所以它會說第一部分被解鎖,然後第一部分被鎖定在同一視圖中,這必須是我如何遍歷和比較數組。隨着調整的代碼(這裏我把一個break
我可以擺脫重複的,但隨後的錯誤的部分被鎖定
我的邏輯是在這裏:。
public function getSections(){
$arrayofuserSections = array();
$tempArray = array();
$user = User::where("id",Auth::user()->id)->first();
foreach ($user->section as $section) {
$tempArray['Name'] = $section["name"];
$tempArray['Goals'] = $section["goals"];
array_push($arrayofuserSections,$tempArray);
}
$finarray = array();
$sections=Section::orderBy('order')->get();
foreach ($sections as $section) {
foreach($arrayofuserSections as $arraysection){
if($section->name == $arraysection["Name"])
{
$arraysection["Unlocked"] = 1;
array_push($finarray,$arraysection);
}
else{
$arraysection["Unlocked"] = 0;
$arraysection["Name"] = $section->name;
$arraysection["Goals"] = "";
array_push($finarray,$arraysection);
}
break;
}
}
return $finarray;
}
$user->section
是從一個法推導該User
模型,在這裏:
public function section()
{
return $this->belongsToMany('App\Models\Section','user_section')->withTimestamps();
}
我的用戶黛比播種是在這裏:
DB::table('user_section')->insert([
'user_id' => 2,
'section_id'=>1
]);
DB::table('user_section')->insert([
'user_id' => 2,
'section_id'=>2
]);
然而,我得到以下結果登錄時的黛比:
所以儘管黛比在連接表兩部分,她只得到了其中的解鎖之一,這同樣改變,如果我刪除或移動休息一下。
謝謝,正確的方向邁出的一大步! –