Дата последнего изменения: 03.04.2021
Для фиксации изменений объекта в базе данных используется метод save:
$book = \Bitrix\Main\Test\Typography\BookTable::getByPrimary(1)
->fetchObject();
$book->setTitle("New title");
$book->save();
С момента сохранения все текущие значения объекта преобразуются в актуальные:
$book = \Bitrix\Main\Test\Typography\BookTable::getByPrimary(1)
->fetchObject();
echo $book->remindActualTitle();
// выведет "Title 1"
$book->setTitle("New title");
echo $book->remindActualTitle();
// выведет "Title 1"
$book->save();
echo $book->remindActualTitle();
// выведет "New title"
Что касается новых объектов, есть два пути их создания. Наиболее читаемый способ — через прямое инстанциирование:
$newBook = new \Bitrix\Main\Test\Typography\Book;
$newBook->setTitle('New title');
$newBook->save();
$newAuthor = new \Bitrix\Main\Test\Typography\EO_Author;
$newAuthor->setName('Some name');
$newAuthor->save();
Способ работает как со стандартными EO_ классами, так и с переопределенными. И даже если вы сначала использовали EO_ класс, а потом решили создать свой, то не придется переписывать существующий код - обратная совместимость сохранится автоматически. Системный класс с префиксом EO_ станет "алиасом" вашему классу.
Более универсальный и обезличенный метод создавать новые объекты — через фабрику сущности:
$newBook = \Bitrix\Main\Test\Typography\BookTable::createObject();
$newBook->setTitle('New title');
$newBook->save();
По умолчанию, в новом объекте устанавливаются все значения по умолчанию, описанные в "маппинге" getMap. Абсолютно чистый объект можно получить, передав соответствующий аргумент в конструктор:
$newBook = new \Bitrix\Main\Test\Typography\Book(false); $newBook = \Bitrix\Main\Test\Typography\BookTable::createObject(false);
Состояние значений меняется аналогично, как при редактировании. До сохранения объекта значения считаются текущими, после сохранения в базе данных переходят в статус actual.