Управление записями
Под записью в 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");
Предыдущий раздел
Группа