Код: Выделить всё
// EntityService.php
public function register (string $entityName, callable $builderFn) : void
{
// Define entity name
$entityName = DynamicEntity::class; // works (only one can be made)
$entityName = DynamicEntity::class . 'Person'; // does not yield metadata
// Create ClassMetadata for the dynamic entity
$metadata = new ClassMetadata($entityName);
$builder = new ClassMetadataBuilder($metadata);
$builder->createField('id', 'integer')->makePrimaryKey()->generatedValue()->build();
// Run custom builder
call_user_func($builderFn, $builder);
// Yield metadata
$metadata = $builder->getClassMetadata();
// Register the dynamic entity metadata with EntityManager
$this->getManager()->getMetadataFactory()->setMetadataFor($entityName, $metadata);
}
< /code>
// SomeCoreClass.php
$this->app()->entity()->register('Tree', function (ClassMetadataBuilder $builder) {
$builder->setTable('tree_for_sake_of_it');
// later to dynamically iterate my EntityBlueprint→fields to register the entity
$builder->createField('red', 'string')->nullable()->build();
});
< /code>
// DatabaseService.php
public function upgrade () : void
{
// Prepare entity manager
$entityManager = $this->app()->entity()->getManager();
// Get all metadata, including dynamic entities
$allMetadata = $entityManager->getMetadataFactory()->getAllMetadata();
$schemaTool = new SchemaTool($entityManager);
// Update SQL database
$schemaTool->updateSchema($allMetadata);
}
< /code>
Как только я получу базовую работу бэкэнда, я в идеале смогу запустить вышеперечисленное, чтобы зарегистрировать объекты; Впоследствии позволяя мне создавать конечные точки для обновления, удаления и т. Д. MapedSuperClass [*] Мне нужно смотреть на кэширование потенциально
[*] Я пытаюсь избежать использования CLI
Я новичок в доктрине Орм, и очень ценит любые мысли или предложения. Спасибо в авансе!
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-and-file
Мобильная версия