JohnCMS
9.4
9.4
  • Введение
  • Начало работы
    • Установка и системные требования
    • Настройка
    • Структура файлов/папок
  • Общие сведения
    • Проблемы и их решение
    • Конфигурационные файлы (configs)
    • Шаблоны электронных сообщений (email)
    • Отправка электронной почты (email)
    • Работа с уведомлениями
    • Работа с запросом (Request)
    • Валидация
      • NotEmpty - Не пустое значение
      • StringLength - длина строки
      • LessThan - Менее чем
      • EmailAddress - Проверка email адреса
      • ModelExists - Проверка существования записи в БД
      • ModelNotExists - Проверка отсутствия записи в БД
      • Csrf - Проверка токена
      • Flood - проверка на флуд
      • Ban - Проверка банов
      • Captcha - Проверка защитного кода
  • Шаблоны
    • Структура стандартного шаблона
    • Изменение стилей шаблона
    • Создание собственного шаблона
  • Модули
    • Структура модуля
    • Создание модуля
    • Маршрутизация (роутинг)
  • Мультиязычность
    • Перевод JohnCMS на другие языки
    • Исправление ошибок в переводе
  • База данных
    • Настройки подключения к базе данных
    • Выполнение запросов к базе данных
    • Вставка записей (insert)
    • Обновление записей (update)
    • Удаление записей (delete)
  • Eloquent ORM
    • Общие сведения и начало работы
  • Пользователи
    • Поля (свойства) пользователей
    • Работа с пользователями в примерах
    • Работа с текущим авторизованным пользователем
Powered by GitBook
On this page
  • PDO
  • Конструктор запросов (Query Builder)
  • Выборка только необходимых столбцов
  • Сортировка результата выборки

Was this helpful?

Export as PDF
  1. База данных

Выполнение запросов к базе данных

PreviousНастройки подключения к базе данныхNextВставка записей (insert)

Last updated 4 years ago

Was this helpful?

На данный момент в 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 для работы с БД используется библиотека которая и предоставляет конструктор запросов и ORM. Рассмотрим несколько основных примеров чтобы понять особенности работы с библиотекой в JohnCMS.

Для выполнения запросов, сначала нам необходимо получить объект текущего подключения к БД:

$connection = \Illuminate\Database\Capsule\Manager::connection();

Далее давайте выполним тот же запрос, который выполняли в обычном PDO варианте выше.

$users = $connection->table('users')->get();
foreach ($users as $user) {
    echo $user->name . '<br>';
}

Этот запрос так же как и в предыдущем варианте выведет список имен пользователей, которые есть в таблице users. Метод get возвращает объект Illuminate\Support\Collection c результатами, в котором каждый результат — это экземпляр PHP-класса StdClass. Вы можете получить значение каждого столбца, обращаясь к столбцу как к свойству объекта. Давайте рассмотрим вариант получения одной строки из таблицы.

$user = $connection->table('users')->where('name', 'admin')->first();
echo $user->name;

Этот запрос вернет пользователя, у которого поле name равно admin.

Рассмотрим вариант вывода записей из таблицы с разбивкой на страницы по 5 элементов:

$user = $connection->table('users')->paginate(5);
foreach ($user as $item) {
    echo $item->name;
}
echo $user->render(); 

При вызове метода paginate будет автоматически установлены ограничения для запроса и построен запрос количества элементов в таблице по указанному вами запросу. Т.е. при таком вызове вам не нужно заботиться об указании limit для запроса и не нужно строить запрос на количество записей, конструктор запросов сделает это за вас. При вызове метода render из нашего объекта, будет отрисована постраничная навигация. URL адреса будут построены исходя из текущей страницы. Вам так же не нужно заботиться об их формировании. Шаблон вывода постраничной навигации расположен тут: themes/default/templates/system/app/model_paginator.phtml

Выборка только необходимых столбцов

Иногда вам может понадобиться выбрать только определенные столбцы из таблицы в базе данных. Сделать это можно так:

$user = $connection->table('users')->select(['name', 'id'])->get();
foreach ($user as $item) {
    echo $item->id . ' - ' . $item->name;
}

Для выборки конкретных столбцов используется метод select(). Он принимает названия столбцов в виде массива или просто списком аргументов. Например: select('name', 'id')

Сортировка результата выборки

Часто есть необходимость отсортировать результат выборки по какому-либо столбцу.

$user = $connection->table('users')
    ->select('name', 'id')
    ->orderBy('id')
    ->orderByDesc('name')
    ->get();
foreach ($user as $item) {
    echo $item->id . ' - ' . $item->name;
}

В этом примере результат будет отсортирован по id и name. Метод orderBy вторым аргументом принимает направление сортировки asc или desc. По умолчанию asc. Метод orderByDesc это то же самое, что и orderBy('id', 'desc') Как видно из примера, сортировать можно по нескольким колонкам. Указанный выше пример выполнит следующий запрос к базе данных:

select `name`, `id` from `users` order by `id` asc, `name` desc

Мы рассмотрели общий принцип построения запросов. Если вы хотите ознакомиться подробно с конструктором запросов, вы можете это сделать или на русском: Обратите внимание, что для выполнения запросов нужно использовать объект $connection, а не DB::. В остальном все возможности, которые описаны по ссылкам, будут работать и в JohnCMS.

illuminate/database
здесь
здесь