我的代码:
$course = Course::find(1);
$teachers = $course->Users()->where('role_id', 1)->get();
$students = $course->Users()->where('role_id', 2)->get();
在此解决方案中,我有两种不同的用户类型。 Users()函数是belongsToMany关系。
public function Users()
{
return $this->belongsToMany(User::class, 'course_users')->withPivot('role_id');
}
我的course_users表列:user_id,course_id,role_id
此代码正常运行。
但是,当我查看查询时,我看到了两种针对这种情况的SQL查询。我想只使用一个查询,只将过滤后的值转换为合适的变量以获得性能。我该怎么办?
我试过下面的代码。但它只取得第一个变量$教师,而不是$ student。
$users = $course->Users();
$teachers = $users->where('role_id', 1)->get();
$students = $users->where('role_id', 2)->get();
你的意见是什么? 谢谢。
答案 0 :(得分:1)
如果只有一个查询很重要,您可以加载如下数据:
$users = $course->Users()->whereIn('role_id', [1, 2])->get();
然后使用该集合过滤数据:
$teachers = $users->where('role_id', 1);
$students = $users->where('role_id', 2);
答案 1 :(得分:-2)
感谢。我这样解决了。
$users = $course->Users()->whereIn('role_id', [1, 2])->get();
$teachers = $users->where('pivot.role_id', 1);
$students = $users->where('pivot.role_id', 2);