• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/orm/propertytofield.php
  • Класс: BitrixIblockORMPropertyToField
  • Вызов: PropertyToField::attachField
static function attachField($property, $propertyValueEntity)
{
	switch ($property->getPropertyType())
	{
		case PropertyTable::TYPE_STRING:

			$propertyValueEntity->addField(new StringField('VALUE'));
			break;

		case PropertyTable::TYPE_NUMBER:

			$propertyValueEntity->addField(new FloatField('VALUE'));
			break;

		case PropertyTable::TYPE_FILE:

			$propertyValueEntity->addField(new IntegerField('VALUE'));

			// add reference to file
			$propertyValueEntity->addField(new Reference(
				'FILE', FileTable::class,
				Join::on("this.VALUE", 'ref.ID')
			));
			break;

		case PropertyTable::TYPE_ELEMENT:

			$propertyValueEntity->addField(new IntegerField('VALUE'));

			// add reference to element
			$refIblock = Iblock::wakeUp($property->getLinkIblockId());
			$refIblock->fill('API_CODE');

			if($refIblock->getApiCode() <> '')
			{
				$refEntityName = $refIblock->getEntityDataClass();

				$propertyValueEntity->addField(
					new Reference('ELEMENT', $refEntityName, Join::on("this.VALUE", 'ref.ID'))
				);
			}
			break;

		case PropertyTable::TYPE_SECTION:

			$propertyValueEntity->addField(new IntegerField('VALUE'));

			// add reference to section
			$propertyValueEntity->addField(new Reference(
				'SECTION', SectionTable::class,
				Join::on("this.VALUE", 'ref.ID')
			));
			break;

		case PropertyTable::TYPE_LIST:

			$propertyValueEntity->addField(new IntegerField('VALUE'));

			// add reference to list item
			$propertyValueEntity->addField(new Reference(
				'ITEM',
				PropertyEnumerationTable::class,
				Join::on('this.VALUE', 'ref.ID')
			));
			break;
	}
}