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