Laravel paginate отношения многие ко многим с нетерпением и порядком - PullRequest
0 голосов
/ 14 февраля 2019

Я изо всех сил стараюсь разбить на страницы результаты отношений «многие ко многим» в 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

Модель доступности имеет область действия с активными датами и упорядочена по дате, в нее включены отношения CourseAvailability.

Попытки:

Просмотр доступности Проблема: я получаю 1 доступность с несколькимикурсы (100 +)

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 голосов
/ 19 февраля 2019

Я понял, что я искал простой запрос 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...