【发布时间】:2022-01-23 23:31:25
【问题描述】:
我需要调用属于当前登录用户的课程,我的模型结构如下
用户有一所学校:
public function school(){
return $this->hasOne(School::class);
}
学校有很多校区
public function campuses(){
return $this->hasMany(Campus::class);
}
校区属于许多课程:
public function school(){
return $this->belongsTo(School::class);
}
public function courses(){
return $this->belongsToMany(Course::class , 'campus_course');
}
课程属于许多校区:
public function campuses(){
return $this->belongsToMany(Campus::class , 'campus_course');
}
我试图像这样调用 CourseController 但它重复数据
课程控制器:
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$modules = array();
foreach(auth()->user()->school->campuses as $item) {
foreach($item->programs as $program) {
array_push($modules , $program);
}
}
return view('programs.index' , compact('modules'));
}
提前致谢。
【问题讨论】:
-
它正在通过所有校园的所有程序。如果所有校区都存在一个程序,那么您将有重复项。之后您可能需要使用
array_unique之类的东西来删除任何重复项。 -
我怎样才能以更好的方式做到这一点?无需查询整个数据库
-
"属于当前登录用户的课程" 但是课程和用户之间没有关系。您只是获得用户学校所有校区的所有课程。您是指用户可以使用的课程吗?用户应该附属于校园吗?
-
您当前的代码也可能只是
$modules = auth()->user()->school->campuses->programs->toArray(); -
嗨 @miken32 是的,校园有 school_id 并且该学校属于用户。
标签: php laravel eloquent many-to-many