Документация

Начало работы

Модели (models)

Шаблоны (views) и маршрутизация (routes)

Формы

SQL запросы

Сессии и безопасность

Плагины

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

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

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

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

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

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

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

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

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

Предположим новости отображаются по URL вида "/news/25/". В файле "config/routes.php" создан маршрут "news/*/" => "view-news.php".

//Содержимое файла view-news.php
<?
$url_part = $mv -> checkUrlPart(2, "numeric");
$news_record = $mv -> news -> findRecord(array("active" => 1, "id" => $url_part));
$mv -> display404($news_record);

$mv -> seo -> mergeParams($news_record -> name." ".I18n :: formatDate($news_record -> date));

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 $mv -> comments -> countRecords(array("active" => 1,
                                                           "news_id" => $news_record -> id)); 
            ?>
        </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($news_id)
    {
        $html = "";
        $rows = $this -> select(array("active" => 1, "order->desc" => "date", "news_id" => $news_id));

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

        return $html;
    }      
}

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

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

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

Деревья