MV framework logo
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Документация
Скачать .zip версия 3.2.0 от 25.12.2024
  • Архитектура
  • Философия
  • Админ панель
  • Поддержка
  • Обратная связь
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
Документация
Начало работы
  • Установка и запуск
  • Структура папок
  • Запуск простого сайта
  • Предустановленные модели
  • SQLite начало работы
  • Системные настройки
  • Миграции
  • Отладка
Модели
  • Общие принципы моделей
  • Типы данных
  • Настройка модели
  • Простые модели
  • Внешние ключи
  • Деревья
  • Многие ко многим
  • Группа
  • Управление записями
  • Управление простыми моделями
  • Дополнительные возможности
Шаблоны и маршрутизация
  • Общие принципы шаблонов
  • Объект класса Router
  • Объект MV
  • Создание нового шаблона
  • Вывод данных в шаблоне
  • Объект класса Record
  • Файлы и изображения
  • Дата и время
  • Редиректы и Http
  • Отправка email
  • Специальные методы
Формы
  • Создание форм
  • Настройка полей формы
  • Валидация полей формы
  • Безопасность форм
  • Работа с данными формы
  • Использование данных из моделей
  • Методы форм
SQL запросы
  • Конструктор запросов
  • Прямые запросы
  • Постраничная разбивка
  • Сортировка
  • Фильтрация
Дополнительно
  • AJAX
  • Плагины
  • Кэширование
  • Безопасность
  • Дополнения к административной панели
MV tracker

Конструктор запросов

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

Примеры использования конструктора запросов

//Запросы внутри класса модели
$rows = $this -> select(['order->desc' => 'date', 'limit->' => 21,7]);
$rows = $this -> select(['parent' => 7, 'active' => 1, 'in_menu' => 1, 'order->asc' => 'order']);

//Запросы из шаблона
$page = $mv -> pages -> find(34);
$block_content = $mv -> blocks -> find(['id' => 1, 'active' => 1]);
$last_article = $mv -> articles -> selectOne(['order->desc' => 'active' => 1]);
$total_active = $mv -> events -> countRecords(['active' => 1]);

Методы модели, использующие конструктор запросов, в качестве параметра все используют массив с параметрами для SQL запроса и обращаются к таблице модели. Если параметры не были переданы, либо передан пустой массив, то будут извлечены все записи из таблицы модели.

  • select() - возвращает ассоциированный массив записей из базы данных, удовлетворяющих условиям поиска, индексы массива - id записей
  • selectOne() - возвращает ассоциированный массив, с полями одной записи
  • selectColumn() - возвращает одномерный индексный массив со значениями нужной колонки, параметр 'fields->' обязателен
  • countRecords() - возвращает целое число, которое является количеством полей удовлетворяющих заданным условиям, без условий посчитает все записи
  • find() - тоже что и selectOne(), но если искомая запись была найдена, то  возвращается объект класса Record, если запись не найдена, то вернется null
//Поиск активной страницы по URL
$content = $mv -> pages -> find(['url' => 'contact', 'active' => 1]);

echo $content -> name;
echo $content -> content;

//Построение списка меню 
public function displayMenu($parent)
{
    $rows = $this -> select(['parent' => $parent, 
                             'active' => 1,
                             'in_menu' => 1,
                             'order->asc' => 'order']);
    
    foreach($rows as $row)
    {
        ...
    }
}

//Построение ленты новостей с учетом пагинации
public function display()
{
    $rows = $this -> select(['order->desc' => 'date', 
                             'limit->' => $this ->  paginator -> getParamsForSQL()]);
    
    foreach($rows as $row)
    {
        ...
    }
}

Параметры для конструктора SQL запросов

'field' => 'value' - параметры вида ‘ключ-значение’, проверка на равенство

//Все записи в родительском разделе id=32
$rows = $this -> select(['parent' => 32]);

//Записи с определенными id в виде массива
$rows = $this -> select(['id' => [1,5,12]]);

//Все новости из раздела Спорт, которые одобрены для публикации
$rows = $mv -> news -> select(['type' => 'sport', 'active' => 1]);

//Все новости определенных категорий
$rows = $mv -> news -> select(['type' => ['sport', 'life', 'relax'], 'active' => 1]);

//Корпоративные клиенты с подтвержденной регистрацией за конкретную дату
$rows = $mv -> clients -> select(['group' => 'copropate', 'confirm' => 1, 'date' => '2023-07-24']);

'field(!=, >, <, >=, <=)' => 'value' - параметры вида ‘ключ-значение’, проверка на неравенство и другие условия

//Все записи кроме типа с id=7
$rows = $this -> select(['type!=' => 7]);

//Товары с ценой больше 450
$rows = $this -> select(['price>' => 450]);

//Книги объемом более 300 страниц, поступившие за определенный временной интервал
$rows = $mv -> books -> select(['pages>=' => 300, 'date>=' => '2022-02-21', 'date<=' => '2024-05-07']);

'fields->' => 'aaa, bbb, ccc' - ограничение полей для выборки, по умолчанию берутся все поля таблицы

//Взять названия и содержания всех активных блоков
$rows = $mv -> blocks -> select(['active' => 1, 'fields->' => 'name,content']);

'field->in' => '1,2,3' - перечисление возможных значений параметра

//Выбрать товары с id равными 3, 64, и 9, которые отображаются в меню
$rows = $mv -> products -> select(['id->in' => '3,64,9', 'in_menu' => 1]);

//Выбрать новости из разделов 1,3,4,7 и 12
$rows = $mv -> news -> select(['theme->in' => '1,3,4,7,12']);

//Вариант с массивом
$rows = $mv -> news -> select(['theme' => [1,3,4,7,12]]);

'field->not-in' => '1,2,3' - перечисление значений, которым не должен удовлетворять параметр

//Выбрать всех клиентов, кроме перечисленных
$rows = $mv -> clients -> select(['id->not-in' => '3,77,91']);

'field->like' => 'abc' - сравнение со строковым значением

//Все клиенты, у которых в фамилии присутствует 'иван' 
$rows = $mv -> clients -> select(['last_name->like' => 'иван']);

'field->not-like' => 'abc' - сравнение с отсутствием строкового значения

//Все страницы, у которых в заголовках отсутствует 'магазин' 
$rows = $mv -> pages -> select(['title->not-like' => 'магазин']);

'order->asc' => 'field', 'order->desc' => 'field' - сортировка результатов выборки, подробнее в разделе Сортировка

//Статьи по дате публикации, вначале самые поздние
$rows = $mv -> articles -> select(['order->desc' => 'date']);

//Товары раздела по цене, вначале дешевые
$rows = $mv -> products -> select(['catalog' => 49, 'order->asc' => 'price']);

'order->double' => 'field->direction' - дополнительная двойная сортировка результатов выборки, применяется совместно с 'order->asc' => 'field' или 'order->desc' => 'field'

//Статьи по дате публикации и дополнительно по рейтингу, в начале самые популярные
$rows = $mv -> articles -> select(['order->desc' => 'date', 'order->double' => 'rating->desc']);

'order->in' => '23,5,76,9' - сортировка результатов выборки в порядке следования значений параметра id, применяется только для MySQL, при этом запускается конструкция 'ORDER BY FIELD (`id`, 23,5,76,9)'

//Товары в порядке следования переданных id
$rows = $mv -> products -> select(['id->in' => '7,32,56', 'order->in' => '7,32,56']);

'order->' => 'random' - сортировка результатов выборки в случайном порядке

//3 статьи в случайном порядке
$rows = $mv -> articles -> select(['order->' => 'random', 'limit->' => 3]);

'limit->' => 'value' - ограничение количества результатов выборки, подробнее в разделе Постраничная разбивка

//3 фотографии, которые доступны для размещение на главной странице
$rows = $mv -> photos -> select(['index_page' => 1, 'limit->' => '3']);

//Последние события, 3 страница при выводе 10 событий на страницу
$rows = $mv -> events -> select(['order->desc' => 'date', 'limit->' => '20,10']);

'table->' => 'value' - указание таблицы к которой направлен запрос, по умолчанию берется таблица модели, из которой вызывается метод

//Все активные комментарии к статье
$rows = $mv -> articles -> select(['active' => 1, 'parent' => 45 'table->' => 'comments']);

//Часто применяется внутри метода модели, когда нужно обратиться к другой таблице
$this -> select(['table->' => 'people', 'event_id' => 3]);

'group->by' - группировка результатов по заданному полю

//Все производители товаров в данном каталоге
$conditions = ['active' => 1, 'group->by' => 'producer', 'parent' => $catalog -> id, 'fields->' => 'id'];
$current_producers = $mv -> products -> selectColumn($conditions);

'extra->' => 'sql query' - дополнительные условия запроса в обыкновенном SQL формате. Добавляются после всех условий оператора WHERE в SQL запросе. Используется для передачи в запрос сложных условий со скобками и/или условием OR.

$mv -> photos -> select(['active' => 1, 'extra->' => "((`type`='ceiling' AND `square`<='38' AND `square`>='7') OR `type` IN('wall', 'table', 'floor'))"]);

'field->m2m' => 'value' - извлечение данных по полю многие ко многим, в качестве значения передается id записи противоположной модели

//Все новости по тэгу с id=24, тэги и новости связаны соотношением многие ко многим
$mv -> news -> select(['active' => 1, 'tag->m2m' => 24]);
Конструктор запросов используется для быстрого извлечения данных по наиболее распространенным сценариям. Он не охватывает всего многообразия SQL конструкций. Для построения более сложных SQL запросов используются прямые запросы.

Предыдущий раздел

Методы форм

Следующий раздел

Прямые запросы
MV workshop banner
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться