Управление записями
Под записью в MV подразумевается одна строка в таблице модели. Запись состоит из полей различных типов. Для операций над записями таблицы используется объект класса Record, управляющий одной записью в таблице.
При работе с объектом Record нужно учитывать следующие особенности.
- При CRUD операциях не запускаются событийные методы модели вида beforeCreate, afterCreate.
- Объект класса Record не сохраняет версии и не проверяет поля на запрет редактирования.
- При удалении через админку запись помещается в корзину, а при использовании класса Record удаляется безвозвратно.
- Методы по работе с записями воздействуют только на те поля таблицы, которые объявлены в модели в массиве $model_elements. Теоретически в таблице базы данных могут быть дополнительные поля, с ними работать можно через Прямые запросы к базе данных.
Рассмотрим управление записями на примере модели историй, которые добавляют пользователи на сайте.
class Stories extends Model
{
protected $name = 'Истории';
protected $model_elements = [
['Активировать', 'bool', 'active'],
['Дата', 'date_time', 'date', ['required' => true]],
['Название', 'char', 'name', ['required' => true]],
['Тематика', 'enum', 'theme', ['values_list' => [
'family' => 'Семья',
'home' => 'Дом',
'travel' => 'Путешествия']]],
['Содержание', 'text', 'content', ['required' => true]]
];
}
Создание записи
//Создаем пустую запись
$story = $mv -> stories -> getEmptyRecord();
//Вносим данные полей
$story -> active = 1;
$story -> name = 'Как стричь газон';
$story -> theme = 'home';
$story -> date = I18n :: getCurrentDateTime();
$story -> content = 'Текст';
//Сохраняем в базу данных
$story -> create();
//Данные для полей также могут быть получены из массива или формы
$story -> setValues([
'active' => 1,
'name' => 'Название истории',
'content' => 'Содержание'
]);
//Передача массива данных из формы
$story -> setValues($form -> getAllValues()) -> create();
//Метод create() возвращает id созданной записи,
//который может быть использован в дальнейшем
$id = $story -> create();
Редактирование записи
//Извлекаем запись и меняем значения полей
$story = $mv -> stories -> find(75);
$story -> active = 0
$story -> name = 'Как стричь газон осенью';
$story -> update();
//Также данные можно получить из массива или формы
$story -> setValues($form -> getAllValues(['name', 'content'])) -> update();
$story -> setValues(['active' => 1, 'theme' => 'family']) -> update();
//Если заранее неизвестно существует ли нужная запись,
//то можно использовать следующие методы
$story = $mv -> stories -> findRecordOrGetEmpty(['name' => 'Как стричь газон']);
$story -> name = 'Как стричь газон';
$story -> active = 1;
//Создаем либо обновляем запись (если запись уже существует)
$story -> save();
Удаление записи
//Запись удаляется без помещения в корзину
$story = $mv -> stories -> find(['name' => 'Как стричь газон осенью']);
$story -> delete();
//Запись помещается в корзину (можно увидеть в админке)
$mv -> stories -> setId(35) -> delete();
Массовое редактирование записей
Используется метод updateManyRecords($params, $conditions), где $params - параметры которые нужно изменить для всех записей, $conditions - условия выборки, описанные в разделе Конструктор запросов.
//Активируем все записи модели
$mv -> stories -> updateManyRecords(['active' => 1]);
//Активируем все записи по определенному признаку
$mv -> stories -> updateManyRecords(['active' => 1], ['theme' => 'home']);
//Более сложный вариант
$mv -> stories -> updateManyRecords([
'active' => 0,
'content' => ''
], [
'active' => 1,
'theme' => ['travel', 'home'],
'date<=' => '2023-09-25 12:00:00'
]);
Массовое удаление записей
Используется метод deleteManyRecords($conditions), где $conditions - условия выборки, описанные в разделе Конструктор запросов.
$mv -> stories -> deleteManyRecords(['active' => 0, 'theme' => 'home']);
Удаление всех записей
Метод clearTable() удаляет все строки таблицы и сбрасывает параметр auto increment для первичного ключа. Если передан необязательный параметр, то очищается не базовая таблица модели, а та, название которой передано в параметре.
//Очистка таблицы stories
$mv -> stories -> clearTable();
//Очистка таблицы comments
$mv -> stories -> clearTable('comments');
Предыдущий раздел
Группа