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

Внешние ключи

Если в модели используется поле типа enum, то списком его значений могут быть данные из другой модели. Такая взаимосвязь строится на основе внешних ключей.

Пример связи между новостями и комментариями, каждый комментарий относится к конкретной новости и связан с ней внешним ключом.

class News extends Model
{
   protected $name = 'Новости';

   protected $model_elements = [
        ['Активировать', 'bool', 'active', ['on_create' => true]],
        ['Название', 'char', 'name', ['required' => true]],
        ['Дата', 'date_time', 'date', ['required' => true]],
        ['Содержание', 'text', 'content', ['rich_text' => 'true']],
        ['Комментарии', 'many_to_one', 'comments', ['related_model' => 'Comments']]
    ];
}

class Comments extends Model
{
    protected $name = 'Комментарии к новостям';

    protected $model_elements = [
       ['Активировать', 'bool', 'active', ['on_create' => true]],
       ['Дата', 'date_time', 'date', ['required' => true]],
       ['Имя', 'char', 'name', ['required' => true]],
       ['Новость', 'enum', 'news_id', ['foreign_key' => 'News']],
       ['Содержание', 'text', 'content']
    ];         
}

У модели Новости присутствует поле Комментарии типа Многие к одному, чтобы можно было видеть количество комментариев к каждой новости, а также быстро перейти к модели комментариев с отфильтрованными записями, относящимися к данной новости.

Отображение записей по внешнему ключу

Предположим, все новости отображаются по URL /news, а отдельная новость по URL вида /news/25.

//Файл config/routes.php

'/news' => 'view-news-all.php',
'/news/*' => 'view-news-detailed.php',
<?
//Файл views/view-news-detailed.php

$url_part = $mv -> checkUrlPart(2, 'numeric');
$news_record = $mv -> news -> find(['active' => 1, 'id' => $url_part]);
$mv -> display404($news_record);

$mv -> seo -> mergeParams($news_record -> name.' '.I18n::formatDate($news_record -> date));
$total = echo $mv -> comments -> countRecords(['active' => 1, 'news_id' => $news_record -> id]);

include $mv -> views_path.'main-header.php'; 
?>

<div id='content'>
    <div class='date'><? echo I18n::formatDate($news_record -> date); ?></div>
    <h1><? echo $news_record -> name; ?></h1>

    <? echo $news_record -> content; ?>

    <div id='comments'>
        <h3>Комментарии: <? echo $total; ?></h3>
        <? echo $mv -> comments -> display($news_record -> id); ?>
    </div>
</div>

<? include $mv -> views_path.'main-footer.php'; ?>

Добавляем функцию отображения комментариев для модели Comments.

<?
class Comments extends Model
{
    ...

    public function display(int $news_id): string
    {
        $html = '';
        $rows = $this -> select(['active' => 1, 'news_id' => $news_id, 'order->desc' => 'date']);

        foreach($rows as $row)
        {
            $html .= '<div class="date">'.$row['name'].' '.I18n::formatDate($row['date']).'</div>';
            $html .= '<p>'.$row['content'].'</p>';
        }

        return $html;
    }      
}

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

Простые модели

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

Деревья
MV workshop banner
MV tracker

© 2014-2025, MV framework team

English MV tracker project Github

Поделиться