Кто пояснит данную конструкцию? Говорю сразу, знания по ООП очень минимальны, буквально что это такое и примерно как с этим работать. Собственно сабж: открываем примеры кода, написанные на Laravel или Yii2, в частности по работе с ORM (вроде бы), и видим такое:$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
Хм... ОК, значит метод where у нас статичный, а остальные нет? Но ведь мы не можем вызывать остальные методы без экземпляра класса Flight, значит используется __construct()? Но почему следом вызывается статичный метод?
Пытался ковырять исходники фреймов, но, сами знаете, абстракция на абстракции и абстракцией погоняет. Может кто-нибудь разъяснить и показать на небольшом примере как это работает по пунктам?P.S. А кто-нибудь сможет привести простой пример таких классов? Или хотя бы ткнуть, куда нужно копать, что читать/изучать? Применима ли такая конструкция только к работе с БД? Или можно, например, создать класс, который отвечает за, скажем, постраничную навигацию и такими доп методами можно будет настраивать ее?

21 Авг 2019 в 07:00
164 +1
1
Ответы
1

Данная конструкция в Laravel или Yii2 называется Query Builder и используется для работы с базой данных.

Пошагово разберем ваш пример:

App\Flight - это модель Flight, которая представляет таблицу в базе данных. Модель содержит логику работы с таблицей, а также устанавливает отношения между таблицами в базе данных.

::where('active', 1) - это метод where, который применяет условие выборки к запросу. В данном случае выбираются записи, у которых значение поля 'active' равно 1.

->orderBy('name', 'desc') - это метод orderBy, который устанавливает сортировку результатов выборки. В данном случае результаты сортируются по полю 'name' в порядке убывания.

->take(10) - это метод take, который ограничивает количество выбранных записей. В данном случае выбираются только 10 записей.

->get() - это метод get, который выполнит запрос к базе данных и вернет результат в виде коллекции объектов модели Flight.

Пример простого класса для постраничной навигации:

class Paginator {
private $perPage;
public function __construct($perPage) {
$this->perPage = $perPage;
}
public function paginate($page) {
$offset = ($page - 1) * $this->perPage;
$result = App\Flight::offset($offset)
->limit($this->perPage)
->get();
return $result;
}
}

Этот класс принимает количество элементов на страницу в конструкторе и имеет метод paginate, который принимает номер страницы и возвращает коллекцию объектов модели Flight с учетом постраничной навигации.

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

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир