Дата последнего изменения: 27.10.2020
Для получения значений свойств достаточно указать их имена в запросе:
$elements = $iblock->getEntityDataClass()::getList([ 'select' => ['ID', 'SOME_FIELD', 'ANOTHER_FIELD.ELEMENT'] ])->fetchCollection(); foreach ($elements as $element) { echo $element->getSomeField()->getValue(); echo $element->getAnotherField()->getElement()->getTitle(); }
Поддерживаются стандартные механики отношений ORM.
При фильтрации следует помнить о структуре свойств. Поле свойства является ссылкой (Reference или OneToMany) на целую сущность, поэтому указание в фильтре имени свойства ни к чему не приведет:
// неправильный пример $element = $iblock->getEntityDataClass()::query() ->where('SOME_FIELD', 'some value') ->fetchObject();
Значение свойства хранится в поле сущности, и это поле всегда называется VALUE. Поэтому корректно указывать именно его в фильтре:
// правильный пример $element = $iblock->getEntityDataClass()::query() ->where('SOME_FIELD.VALUE', 'some value') ->fetchObject();
Для создания нового объекта можно использовать как конструктор соответствующего класса,
$newElement = new \Bitrix\Iblock\Elements\EO_ElementLink;
так и фабрику сущности.
$newElement = $iblock->getEntityDataClass()::createObject();
Изменение значений и описаний свойств происходит непосредственно через объект свойства:
// установка строкового значения $element->getSomeString()->setValue('new value'); // установка описания $element->getSomeString()->setDescription('new descr'); // установка привязки к элементу $element->getSomeElement()->setElement($anotherElement);
Кроме этого, можно поставить значение напрямую в поле свойства:
$element->setSomeString('new value');
А также можно воспользоваться псевдо объектом значения свойства Bitrix\Iblock\ORM\PropertyValue
:
use Bitrix\Iblock\ORM\PropertyValue; // только значение $value = new PropertyValue('new value'); // значение и описание $value = new PropertyValue('new value', 'new descr'); // установка значения/описания $element->setSomeString($value);
Установка значений для множественных свойств работает аналогично с той лишь разницей, что речь идет не о Reference, а об отношении OneToMany:
use Bitrix\Iblock\ORM\PropertyValue; foreach ($element->getOtherField() as $value) { $value->setValue('new value'); $value->setDescription('new descr'); } $element->addToOtherField(new PropertyValue('new value')); $element->addToOtherField(new PropertyValue('new value', 'new descr'));
Объект элемента сохраняется так же, как и любой другой объект ORM:
$element->save();
Несмотря на то, что значения свойств фактически хранятся в разных таблицах в виде отношений с объектом, при сохранении внутри объекта все будет разложено по своим местам.
Удалить элемент можно через метод объекта delete:
$element->delete();
При удалении так же, как и при сохранении, значения свойств обрабатываются автоматически. Удалятся и привязки к секциям.