【发布时间】:2017-03-29 09:50:40
【问题描述】:
我正在尝试使用多对多关系来完成以下工作流程:
有很多部分和很多用户。每个用户都有他们已解锁的部分。例如,如果有两个部分(部分 I 和部分 II),第一个用户 Jim (
id = 1) 已解锁部分 X,第二个用户 Debbie (id = 2) 已解锁部分 I 和 II。
1234563
user_section 已成功用作User 和Section 模型之间的联合表。该连接表是用户和部分混合的地方,如果在该部分中有给定user_id 的条目,则对应的section_id 被解锁。
我有以下功能 1. 获取视图的所有部分 2. 让我知道哪些部分已被用户解锁。
问题是我出现了重复的部分,所以它会说部分 I 已解锁,然后部分 I 全部锁定在同一个视图中,这一定是我遍历和比较数组的方式。通过对代码进行调整(我在其中放置了 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();
}
我为用户 Debbie 播种在这里:
DB::table('user_section')->insert([
'user_id' => 2,
'section_id'=>1
]);
DB::table('user_section')->insert([
'user_id' => 2,
'section_id'=>2
]);
但我以 Debbie 身份登录时得到以下结果:
因此,即使 Debbie 在连接表中同时拥有这两个部分,但她只解锁了其中一个部分,如果我删除或移动休息区,情况也会再次发生变化。
【问题讨论】: