小编in7*_*n7l的帖子

Symfony 2中可配置的动态Doctrine数据库实体

我想要实现的目标

  • 用户可以通过网站上的HTML表单配置Doctrine实体.
  • 用户可以定义新实体,以及添加和删除现有实体的字段.(类似于Drupal的内容类型)
  • Doctrine实体将根据用户通过Web UI提供的配置获取动态属性.
  • 每当实体配置发生变化时,每个Doctrine实体的单个DB表都会动态更改; 或者每个实体可能有多个表使用(每个新的实体字段都有自己的表).

到目前为止已完成

过去几天我一直在研究这个问题而没有太大成功,但我偶然发现了这个与我想要实现的目标非常相关的答案.

我已注册并添加了loadClassMetadata侦听器,该侦听器映射字段foo:

// src/DynamicMappingTest/AdminBundle/EventListener/MappingListener.php

namespace DynamicMappingTest\AdminBundle\EventListener;

use Doctrine\ORM\Event\LoadClassMetadataEventArgs;

class MappingListener
{
    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
    {
        $classMetadata = $eventArgs->getClassMetadata();
        if ($classMetadata->getName() != 'DynamicMappingTest\\AdminBundle\\Entity\\CustomNode')
        {
            // Not the CustomNode test class. Do not alter the class metadata.
            return;
        }
        $table = $classMetadata->table;

        $oldName = $table['name'];      // ... or $classMetaData->getTableName()

        // your logic here ...

        $table['name'] = 'custom_node';

        $classMetadata->setPrimaryTable($table);

        $reflClass = $classMetadata->getReflectionClass();
        dump($reflClass);

        // ... or …
Run Code Online (Sandbox Code Playgroud)

php symfony doctrine-orm

11
推荐指数
1
解决办法
2022
查看次数

标签 统计

doctrine-orm ×1

php ×1

symfony ×1