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

Многие ко многим

Для построение соотношения многие ко многим между двумя моделями необходимо в массив $model_elements дописать код нового поля. Дополнительные настройки для поля представлены в описании типа данных Многие ко многим many_to_many.

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

class Pages extends Model
{
    protected $name = 'Меню страниц';
    
    protected $model_elements = [
    
        ...
        
        ['Текстовые блоки', 'many_to_many', 'blocks', ['related_model' => 'Blocks']]
    ];
}

Запускаем миграцию из консоли или админки.

composer mv:migrations

Теперь в административном интерфейсе модели Pages появится поле для выбора блоков, которые относятся к данной модели. В модели Blocks пока нет такого поля. Если мы хотим, чтобы оно было и во второй модели, то также добавляем код в файл модели. Миграцию при этом запускать уже не нужно.

class Blocks extends Model
{
    protected $name = 'Текстовые блоки';
    
    protected $model_elements = [
        ...
        
        ['Страницы меню', 'many_to_many', 'pages', ['related_model' => 'Pages']]
    ];
}
Когда создается обратная связь многие ко многим (например от модели Blocks к модели Pages) название поля pages должно совпадать с названием связанной модели. Тогда в административной панели в общей таблице создаются ссылки на вторую модель для запуска фильтра по этому полю.

Если в шаблоне или модели нужно получить записи по соотношению многие ко многим, используется специальный метод asArrays().

//Извлекаем запись, объект класса Record
$page = $mv -> pages -> find(65);

//Либо так
$page = (new Pages) -> find(65);

//Получаем массив блоков
$blocks = $page -> asArrays('blocks');

//Массив с дополнительными условиями (SQL)
$blocks = $page -> asArrays('blocks', ['active' => 1, 'order->asc' => 'name']);

//Выводим на экран для проверки
Debug::pre($blocks);

Когда нужно вывести записи, с учетом соотношения 'многие ко многим', можно воспользоваться специальным параметром из конструктора запросов.

//В модели Blocks добавляем новый метод для получения блоков конкретной страницы
public function getRelatedBlocks($page_id)
{
    $rows = $this -> select(['pages->m2m' => $page_id, 'active' => 1));
    $html = '';
    
    foreach($rows as $row)
    {
        $html .= ...
    }
    
    return $html;
}

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

Деревья

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

Группа
MV workshop banner
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться