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

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

Модели (models)

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

Формы

SQL запросы

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

Плагины

Управление записями

Под записью в MV подразумевается 1 строка в таблице модели. Запись состоит из полей различных типов. Для операций над записями таблицы можно использовать объект модели или объект класса Record, управляющий одной записью в таблице. Отличия этих подходов в следующем:

  • При использовании объекта модели происходит сохранение версии, которая доступна в административной панели в первой колонке при редактировании записи.
  • Также, при использовании объекта модели происходит проверка поля на возможность редактирования записи (Настройка модели).
  • В объекте модели при операциях запускаются методы вида "beforeCreate()", "afterCreate()".
  • Объект класса Record не сохраняет версии и не проверяет поля на запрет редактирования.
  • При удалении через объект модели запись помещается в корзину, а при использовании класса Record удаляется безвозвратно.

Внимание! методы по работе с записями воздействуют только на поля таблицы БД, которые объявлены в модели в массиве "$model_elements". Теоретически в таблице базы данных могут быть дополнительные поля, с ними работать можно через Прямые запросы к базе данных.

Рассмотрим управление записями на примере модели историй, которые добавляют пользователи на сайте.

class Stories extends Model
{
    protected $name = "Истории";

    protected $model_elements = array(
       array("Активировать", "bool", "active"), array("Дата", "date_time", "date", array("required" => true)),
       array("Название", "char", "name", array("required" => true)),
       array("Тематика", "enum", "theme", array("values_list" => array("family" => "Семья", 
                                                                       "home" => "Дом", 
                                                                       "travel" => "Путешествия"))),
       array("Содержание", "text", "content", array("required" => true))
    );
}

Использование объекта Record

Создание записи

$story = $mv -> stories -> getEmptyRecord();

$story -> active = 1;
$story -> name = "Как стричь газон";
$story -> theme = "home";
$story -> date = I18n :: getCurrentDateTime();
$story -> content = "Текст";
$story -> create();

//Данные для полей также могут быть получены из массива
$story -> setValues($form -> getAllValues());

$id = $story -> create();
//Метод "create()" возвращает id созданной записи,
//который может быть использован в дальнейшем

Редактирование записи

$story = $mv -> stories -> findRecordById(75);

$story -> active = 0
$story -> name = "Как стричь газон осенью";
$story -> update();

//Также данные можно получить из массива
$story -> setValues($form -> getAllValues($fields));
$story -> setValues(array("active" => 1, "theme" => "family"));

Удаление записи

Запись удаляется без помещения в корзину

$story = $mv -> stories -> findRecord(array("name" => "Как стричь газон осенью"));
$story -> delete();

Использование методов модели

Создание записи

$form = new Form("Stories");
$fields = array("name", "theme", "content");

if(!empty($_POST)
{
    $form -> getDataFromPost() -> validate($fields);

    if(!$form -> hasErrors())
    {
        $mv -> stories -> getDataFromArray($form -> getAllValues($fields));
        $mv -> stories -> getDataFromArray(array("active" => 1, "date" => I18n :: getCurrentDateTime()));
        $new_id = $mv -> stories -> create();
    }
}

Метод "$mv -> stories -> create()" возвращает id созданной записи, который может быть использован в дальнейшем.

Редактирование записи

Аналогично созданию записи, но вначале надо иметь id нужной записи и считать запись из базы данных.

//id записи можно получить например из маршрутизатора
$id = $mv -> router -> getUrlPart(1);

if($mv -> stories -> checkRecordById($id))
    //Считываем запись, загружаем в объект модели значения всех полей
     $mv -> stories -> read($id);
else 
    ... //такой записи не существует

//Далее аналогично созданию записи, после чего вызываем метод обновления
$mv -> stories -> getDataFromArray(...);
$mv -> stories -> update();

Одновременное редактирование нескольких записей

Используется метод updateManyRecords($params, $conditions), где $params - параметры которые нужно изменить для всех записей, $conditions - условия выборки, описанные в разделе Конструктор запросов.

$mv -> comments -> updateManyRecords(array("read" => 1), array("user" => 523,"read" => 0));

Удаление записи

//Запись помещается в корзину
$id = $mv -> router -> getUrlPart(1);
$mv -> stories -> setId($id) -> delete();

Одновременное удаление нескольких записей

Используется метод deleteManyRecords($conditions), где $conditions - условия выборки, описанные в разделе Конструктор запросов.

$mv -> stories -> deleteManyRecords(array("active" => 0, "theme" => "home"));

Удаление всех записей

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

//Очистка таблицы stories 
$mv -> stories -> clearTable(); 

//Очистка таблицы comments 
$mv -> stories -> clearTable("comments");

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

Группа