он использовался, когда делаю что-то типа MyModel::where('bla bla bla')->paginate(20); ?
делай свой класс, который будет принимать запрос и выдавать ответ с пагинацией
Я сделал всякие методы типа scopeMyFn(Builder $query) : Builder {}, которые запрос принимают и запрос отдают. А как сделать, чтобы после этой цепочке при использовании например MyModel::where(...)->myFn()->orderBy()->paginate() вызывался именно мой метод от моего переопределенного класса пагинатора?
Может тут чего пишут https://adevait.com/laravel/laravel-overwriting-default-pagination-system
Всё-таки сделал это :) Унаследовал и класс пагинатора, и класс построителя запроса. Оставалось дело за малым, как-то связать эти новые классы с поведением по умолчанию :) Оказалось, что у класса Model есть public-метод newEloquentBuilder(), который соответственно вызывается при всяких штатных NewModelQuery(), которые как раз вызываются при конструкциях вида MyModel::where()->...()->get(). Соответственно, переопределил у модели этот метод newEloquentBuilder(), в нем создал экземпляр своего производного класса от CustomEloquentBuilder, в нем переопределил метод paginate(), в котором соответственно вернул экземпляр своего производного класса от Paginator(). А уже в своем производном классе CustomPaginator переопределил методы elements() и linkCollection() - и соответственно у меня теперь свой алгоритм рассчета страниц пагинации и ссылок для них ;)
Обсуждают сегодня