Выполнение запросов к базе данных
На данный момент в JohnCMS доступны несколько вариантов выполнения запросов к базе данных.
PDO
Этот вариант многим известен и применяется ещё с JohnCMS 7.0. Давайте рассмотрим особенности использования этого варианта. Чтобы получить объект PDO нам достаточно написать следующий код:
$db = di(PDO::class);Далее используя объект $db вы можете выполнять запросы к базе данных. Рассмотрим пример, который получает записи из таблицы users:
$db = di(PDO::class);
$req = $db->query('SELECT * FROM `users`');
while ($row = $req->fetch()) {
echo $row['name'] .'
';
}Этот пример выведет список имен пользователей, которые есть в таблице users.
Обратите внимание При работе с этим вариантом вы должны самостоятельно заботиться о безопасности запросов.
Конструктор запросов (Query Builder)
В JohnCMS для работы с БД используется библиотека illuminate/database которая и предоставляет конструктор запросов и ORM. Рассмотрим несколько основных примеров чтобы понять особенности работы с библиотекой в JohnCMS.
Для выполнения запросов, сначала нам необходимо получить объект текущего подключения к БД:
Далее давайте выполним тот же запрос, который выполняли в обычном PDO варианте выше.
Этот запрос так же как и в предыдущем варианте выведет список имен пользователей, которые есть в таблице users. Метод get возвращает объект Illuminate\Support\Collection c результатами, в котором каждый результат — это экземпляр PHP-класса StdClass. Вы можете получить значение каждого столбца, обращаясь к столбцу как к свойству объекта. Давайте рассмотрим вариант получения одной строки из таблицы.
Этот запрос вернет пользователя, у которого поле name равно admin.
Рассмотрим вариант вывода записей из таблицы с разбивкой на страницы по 5 элементов.
Метод paginate конструктора запросов в JohnCMS не используется: постраничную навигацию строит сервис PaginationFactory, а запрос получает явные limit и offset.
Метод render() возвращает готовую разметку навигации, а адреса страниц строятся из текущего URL — заботиться об их формировании не нужно. В шаблоне она выводится как обычная переменная:
Шаблон постраничной навигации расположен тут: themes/default/templates/components/pagination.twig
Выборка только необходимых столбцов
Иногда вам может понадобиться выбрать только определенные столбцы из таблицы в базе данных. Сделать это можно так:
Для выборки конкретных столбцов используется метод select(). Он принимает названия столбцов в виде массива или просто списком аргументов. Например: select('name', 'id')
Сортировка результата выборки
Часто есть необходимость отсортировать результат выборки по какому-либо столбцу.
В этом примере результат будет отсортирован по id и name. Метод orderBy вторым аргументом принимает направление сортировки asc или desc. По умолчанию asc. Метод orderByDesc это то же самое, что и orderBy('id', 'desc') Как видно из примера, сортировать можно по нескольким колонкам. Указанный выше пример выполнит следующий запрос к базе данных:
Мы рассмотрели общий принцип построения запросов. Если вы хотите ознакомиться подробно с конструктором запросов, вы можете это сделать здесь или на русском: здесь Обратите внимание, что для выполнения запросов нужно использовать объект $connection, а не DB::. В остальном все возможности, которые описаны по ссылкам, будут работать и в JohnCMS.
Последнее обновление
Это было полезно?