Пагинирование внутренних записей объекта laravel

У меня есть задача, где имеется вот такой фронт сайта: Отображение списка преподавателей с пагинацией

Необходимо передать на клиентскую часть эти данные с пагинацией.

У этой страницы есть вот такие таблицы связью многие ко многим: ERD

Следовательно я создаю в моделях связи:

Предметы:

class Subject extends Model
{
    use HasFactory;

    public $timestamps = false;

    /**
     *
     * Получение связанного атрибута преподаватели
     *
     * @return BelongsToMany
     */
    public function professors(): BelongsToMany
    {
        return $this->belongsToMany(Professor::class, "subjects_of_professor");
    }

    /**
     *
     * Получение связанного атрибута предметы преподавателей
     *
     * @return HasMany
     */
    public function subjectsOfProfessor(): HasMany
    {
        return $this->hasMany(SubjectsOfProfessor::class, "subject_id", "id");
    }
}

Преподаватели:

class Professor extends Model
{
    use HasFactory;

    public $timestamps = false;

    protected $hidden = [];

    /**
     *
     * Получение связанного атрибута предметы
     *
     * @return BelongsToMany
     */
    public function subjects(): BelongsToMany
    {
        return $this->belongsToMany(Subject::class, "subjects_of_professor");
    }
}

И тут проблема, каким образом можно получить эти данные с пагинацией таким образом, чтобы на этой странице выводился преподаватель два раза, если например у этого преподавателя два предмета.

Пример:

Иванов Иван Иванович - математика

Иванов Иван Иванович - русский язык

При этом, у Иван Ивановича могут быть 10 предметов, а на странице, например, нужно вывести только 5 таких записей, следовательно на следующей странице должны вывесить остальные 5 предметов этого преподавателя.

Есть ли решение этой проблемы, кроме как делать много запросов к базе данных?


Ответы (0 шт):