Php 从现有表自动生成条令实体

Php 从现有表自动生成条令实体,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我正在尝试从数据库的特定表自动生成实体。我不想在整个数据库中发送条令,因为其中有一些表与条令不兼容(比如来自遗留数据库的表没有主键[yes…]) 不幸的是,所有的博客帖子和Anwers都没有帮助,因为参数“-filter”没有按预期工作 我所做的: 我尝试了从这开始的第一步,也阅读了这篇文章 我将filter参数理解为只针对特定表进行筛选的解决方案。但是这个过滤器没有被应用。该过程被异常“表XYZ没有主键”取消(此处为真,不属于问题的一部分) 我想我可以创建一个完整的新数据库,而不需要有问题的表

我正在尝试从数据库的特定表自动生成实体。我不想在整个数据库中发送条令,因为其中有一些表与条令不兼容(比如来自遗留数据库的表没有主键[yes…])

不幸的是,所有的博客帖子和Anwers都没有帮助,因为参数“-filter”没有按预期工作

我所做的:

我尝试了从这开始的第一步,也阅读了这篇文章

我将filter参数理解为只针对特定表进行筛选的解决方案。但是这个过滤器没有被应用。该过程被异常“表XYZ没有主键”取消(此处为真,不属于问题的一部分)

我想我可以创建一个完整的新数据库,而不需要有问题的表来创建注释和实体。 但我想知道关于这个过程写了什么,为什么它不起作用

更新

我还尝试了第一个答案中的建议:

php app/console doctrine:mapping:import --force AcmeBlogBundle yml
AcmeBlogBundle是我真正的bundle的占位符。然后,导入任务将以以下方式停止:

[Symfony\Component\Debug\Exception\ContextErrorException]
警告:类_parents():类操作不存在,无法加载

第一个表格叫做“action”。当我放下这个表时,它会在下一个表中停止,并出现一个simular异常

更新2

上面提到的异常是由于以前使用的ORM实现在名为“Entity”的目录中为每个表创建了“ActionEntity.php”类而导致的。我想这就是为什么会有例外。在我删除这个目录后,异常消失了(但在我的情况下,这不是一个好的解决方案)

我现在做的是:我删除了所有外键(它们制造了麻烦),我设置了一个全新的symfony项目,然后运行第一个答案中的所有注释,然后得到了预生成的实体类,但没有任何外键实现。我现在必须添加这些内容,包括对数据库方案的一些更改,因为原则2在这里有一些限制,比如不支持主键作为外键等等。 但现在我可以选择那些实体类并调整与其他实体的缺失连接

总而言之:整个过程并不令人满意…

来自文档:

正如条令工具文档所说,逆向工程是一种 开始一个项目的一次性过程。教条能够 转换大约70-80%的必要映射信息 基于字段、索引和外键约束。教条不能 发现具有的反向关联、继承类型和实体 外键作为主键或关联上的语义操作 例如级联或生命周期事件。关于 随后,需要生成实体来设计每个实体以使其适合 您的域模型特性

从数据库导入实体的正确步骤:

  • php-bin/console原则:映射:导入——强制AcmeBlogBundle-xml
  • php-bin/console原则:映射:转换注释。/src
  • php-bin/console原则:生成:实体AcmeBlogBundle

  • 您可以使用xmlyml,但是它只在我的案例中使用xml。

    我以编程方式使用这些命令, 这个函数读取config.yml文件中指示的数据库

    # Doctrine Configuration
    doctrine:
        dbal:
            default_connection: dbalYmlConfig
            connections:
    
    这些命令是:-

           'command' => 'doctrine:mapping:convert',
           'to-type' => 'yml',
           'dest-path' => $rawOrmTempSavePath,
           '--from-database' => true,
           '--force' => true,
    
    这将为每个数据库表架构创建x.orm.yml文件映射

    这将从Resources/config/doctor中的x.orm.yml创建实体文件

           'command' => 'doctrine:generate:entities',
           'name' => 'MyBundle',
    
    旁注:我将x.orm.yml文件放在一个临时目录中,然后将它们复制到config/doctor文件夹中,并将捆绑包名称添加到x.orm.yml文件头中,但您可以直接将文件转储到config/doctor中


    Anyhoo这个方法对我很有效。

    我做到了:php应用程序/控制台原则:映射:导入——强制AcmeBlogBundle yml。这会在名为“action”的第一个表处出现以下错误:“[Symfony\Component\Debug\Exception\ContextErrorException]警告:class_parents():class action不存在且无法加载”。删除此表时,if将停止使用具有相同模式的下一个表。两个表都有名为“id”的主键
           'command' => 'doctrine:generate:entities',
           'name' => 'MyBundle',