Laravel用渴望和订购来分页

时间:2019-02-14 10:26:06

标签: laravel laravel-5

我正在努力对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');

1 个答案:

答案 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();