Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2中的可配置动态条令数据库实体 我正在努力实现的目标 用户可以通过网站上的HTML表单配置条令实体 用户将能够定义新实体,以及为现有实体添加和删除字段。(类似于) 条令实体将根据用户通过web UI提供的配置获得动态属性 当实体配置发生变化时,每个条令实体的单个DB表将动态地改变;或者,每个实体可以使用多个表(每个新实体字段都有自己的表) 迄今为止已完成_Php_Symfony_Doctrine Orm - Fatal编程技术网

Php Symfony 2中的可配置动态条令数据库实体 我正在努力实现的目标 用户可以通过网站上的HTML表单配置条令实体 用户将能够定义新实体,以及为现有实体添加和删除字段。(类似于) 条令实体将根据用户通过web UI提供的配置获得动态属性 当实体配置发生变化时,每个条令实体的单个DB表将动态地改变;或者,每个实体可以使用多个表(每个新实体字段都有自己的表) 迄今为止已完成

Php Symfony 2中的可配置动态条令数据库实体 我正在努力实现的目标 用户可以通过网站上的HTML表单配置条令实体 用户将能够定义新实体,以及为现有实体添加和删除字段。(类似于) 条令实体将根据用户通过web UI提供的配置获得动态属性 当实体配置发生变化时,每个条令实体的单个DB表将动态地改变;或者,每个实体可以使用多个表(每个新实体字段都有自己的表) 迄今为止已完成,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,在过去的几天里,我一直在研究这个问题,但没有取得多大成功,但我偶然发现了一个似乎与我正在努力实现的目标非常相关的问题 我已经注册并添加了loadClassMetadata侦听器,该侦听器映射字段foo: 现在,只要我在DynamicMappingTest\AdminBundle\Entity\CustomNode类中声明了foo属性,这一切都可以工作: 问题 但是,我无法知道用户将为其自定义实体定义哪些属性。如果我从CustomNode类中删除foo属性,那么从ClassMetadata中获取的

在过去的几天里,我一直在研究这个问题,但没有取得多大成功,但我偶然发现了一个似乎与我正在努力实现的目标非常相关的问题

我已经注册并添加了loadClassMetadata侦听器,该侦听器映射字段foo: 现在,只要我在DynamicMappingTest\AdminBundle\Entity\CustomNode类中声明了foo属性,这一切都可以工作: 问题 但是,我无法知道用户将为其自定义实体定义哪些属性。如果我从CustomNode类中删除foo属性,那么从ClassMetadata中获取的ReflectionClass自然不会包含foo属性,因此每当执行MappingListener中的mapField()时,我会得到以下异常:

ReflectionException: Property DynamicMappingTest\AdminBundle\Entity\CustomNode::$foo does not exist
in vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php at line 80

问题
  • 有可能拥有完全可配置的动态条令实体吗
  • 我的方法正确吗?如果没有,你能提出一个替代方案吗
  • 我怎样才能拥有真正的动态类属性?或者,我应该在用户更改实体配置时生成新的Doctrine实体PHP类吗
是否可以拥有完全可配置的动态条令实体? 条令为您的实体生成代理类。这意味着doctrine使用类生成PHP代码,该类扩展实体类并覆盖方法-放置一些自定义逻辑,然后调用父方法

因此,我认为实现这一点的唯一方法是为代码中的实体生成PHP代码。也就是说,每次在您的网站中创建实体时,您都应该使用该实体生成PHP文件,然后运行迁移

我的方法正确吗?如果没有,你能提出一个替代方案吗? 我认为在这种情况下你根本不应该使用ORM,至少在你尝试这样做的方式上是这样

通常,ORM用于更容易/更易于管理的编程。也就是说,您可以设置关系、使用延迟加载、工作单元(更改实体属性,然后刷新)等。如果您的实体是动态生成的,您将使用哪些功能?开发人员不会为这些实体编写代码,因为正如您所说的,无法知道它将拥有哪些字段

您还没有提供具体的用例——为什么您首先要这样做。但我想这可以用更简单的方法来实现

如果用户可以存储任何结构,那么您是否应该使用MySQL?在这种情况下,ElasticSearch或类似的解决方案可能会更好

我怎样才能拥有真正的动态类属性?或者,我应该在用户更改实体配置时生成新的Doctrine实体PHP类吗?
正如我提到的——是的。除非你想覆盖或替换一些条令代码,但我想可能会有很多(代理类等)

你在这方面有什么进展吗?我也处于类似的困境中,可以使用任何见解:)@Alex.Barylski有一个类似的问题,也许它会帮助你:我已经开发了一些类似于你想要实现的东西。但我使用的是标准SQL。如果您最终也使用了标准SQL,那么您将始终需要选择/更新/任何使用标准SQL的动态实体。SalesForce实现了这个概念,尽管可能没有使用条令。它允许用户创建和关联自定义对象和字段。以及在基础对象数据点上创建报告、视图/表单和仪表板。然而,如上所述,ORM不会在后端用于为最终用户“生成”对象和关联。ORM将用于开发将其连接在一起的逻辑,以便向最终用户显示分配的关联;e、 g.
类用户对象::$fields
类用户字段::$dataType
,等等。一个用例是让客户能够自己定义其产品类/类别。他可以定义类应该具有哪些属性,以及该属性可能具有哪些值。我开发了这样一个东西,但我使用标准sql。
// src/DynamicMappingTest/AdminBundle/Entity/CustomNode.php

namespace DynamicMappingTest\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * CustomNode
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="DynamicMappingTest\AdminBundle\Entity\CustomNodeRepository")
 */
class CustomNode
{
    ...
    private $foo;
}
ReflectionException: Property DynamicMappingTest\AdminBundle\Entity\CustomNode::$foo does not exist
in vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php at line 80
77.         */
78.        public function getAccessibleProperty($class, $property)
79.        {
80.            $reflectionProperty = new ReflectionProperty($class, $property);
81.
82.            if ($reflectionProperty->isPublic()) {
83.                $reflectionProperty = new RuntimePublicReflectionProperty($class, $property);