我正在努力对Laravel中多对多关系的结果进行分页。我想对组合进行分页:并非1门课程具有10个可用性,而是相反。我想要10门课程并提供10种课程。如果您查询关系表,但是我想按表的字段排序(可用日期),这很容易。
数据库结构(简化)
courses
id - integer
name - string
course_availability //relation table
course_id - integer
availability_id - integer
availability
id - integer
date - date
“可用性”模型的作用域具有有效日期,并按日期排序,“课程可用性”关系已包括在内。
尝试:
可用性视图 问题:我获得多门课程(超过100门)的1种可用性
Availability::whereHas('courseAvailability', function ($q) use($course_ids) {
$q->whereIn('courses_id', $course_ids);
})->with('courseAvailability' => function($q) use($course_ids) {
$q->whereIn('courses_id', $course_ids);
}])->forPage(1, 10)->get();
课程可用性视图问题:对10个结果(而不是实际数据)的关系值进行排序
CourseAvailability::whereIn('courses_id', $course_ids)
->whereIn('availability_id', $availability_ids)
->forPage(1, 10)->get()->sortBy('availability.date');
答案 0 :(得分:0)
我知道了,我要寻找的是一个简单的join查询。
以下为我工作:
$availability =
CourseAvailability::join('availability', 'availability.id', '=', 'course_availability.availability_id')
->where('availability.date', '>', date('Y-m-d'))
->orderBy('availability.date')
->whereIn('courses_id', $course_ids);
+处理:
$availability = $availability
->with(['course.options', 'availability.location.meta'])
->forPage($page, $perPage)->get()->flatten();