• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/orm/entity.php
  • Класс: BitrixMainORMEntity
  • Вызов: Entity::compileEntity
static function compileEntity($entityName, $fields = null, $parameters = array())
{
	$classCode = '';
	$classCodeEnd = '';

	if (strtolower(substr($entityName, -5)) !== 'table')
	{
		$entityName .= 'Table';
	}

	// validation
	if (!preg_match('/^[a-z0-9_]+$/i', $entityName))
	{
		throw new MainArgumentException(sprintf(
			'Invalid entity className `%s`.', $entityName
		));
	}

	/** @var DataManager $fullEntityName */
	$fullEntityName = $entityName;

	// namespace configuration
	if (!empty($parameters['namespace']) && $parameters['namespace'] !== '\')
	{
		$namespace = $parameters['namespace'];

		if (!preg_match('/^[a-z0-9_\\]+$/i', $namespace))
		{
			throw new MainArgumentException(sprintf(
				'Invalid namespace name `%s`', $namespace
			));
		}

		$classCode = $classCode."namespace {$namespace} "."{";
		$classCodeEnd = '}'.$classCodeEnd;

		$fullEntityName = '\'.$namespace.'\'.$fullEntityName;
	}

	$parentClass = !empty($parameters['parent']) ? $parameters['parent'] : DataManager::class;

	// build entity code
	$classCode = $classCode."class {$entityName} extends \".$parentClass." {";
	$classCodeEnd = '}'.$classCodeEnd;

	if (!empty($parameters['table_name']))
	{
		$classCode .= 'public static function getTableName(){return '.var_export($parameters['table_name'], true).';}';
	}

	if (!empty($parameters['uf_id']))
	{
		$classCode .= 'public static function getUfId(){return '.var_export($parameters['uf_id'], true).';}';
	}

	if (!empty($parameters['default_scope']))
	{
		$classCode .= 'public static function setDefaultScope($query){'.$parameters['default_scope'].'}';
	}

	if (isset($parameters['parent_map']) && $parameters['parent_map'] == false)
	{
		$classCode .= 'public static function getMap(){return [];}';
	}

	if(isset($parameters['object_parent']) && is_a($parameters['object_parent'], EntityObject::class, true))
	{
		$classCode .= 'public static function getObjectParentClass(){return '.var_export($parameters['object_parent'], true).';}';
	}

	// create entity
	eval($classCode.$classCodeEnd);

	$entity = $fullEntityName::getEntity();

	// add fields
	if (!empty($fields))
	{
		foreach ($fields as $fieldName => $field)
		{
			$entity->addField($field, $fieldName);
		}
	}

	return $entity;
}