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