如何从现有的数据库生成实体
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
如何从现有的数据库生成实体
当开始一个使用数据库的全新项目时,会出现两种不同的情况。在大多数情况下,数据库模型是从头设计和构建的。但是,有时您将从现有的且可能不可更改的数据库模型开始。幸运的是,Doctrine附带了一堆工具来帮助您从现有的数据库生成模型类。
请注意
随着理论工具文档欧宝体育电话就是说,逆向工程是启动一个项目的一次性过程。Doctrine能够根据字段、索引和外键约束转换大约70-80%的必要映射信息。Doctrine无法发现反向关联、继承类型、外键为主键的实体或关联上的语义操作(如级联或生命周期事件)。随后需要对生成的实体进行一些额外的工作,以设计每个实体以适合您的领域模型特性。
本教程假设你正在使用一个简单的博客应用程序,有以下两个表:blog_post
而且blog_comment
.由于外键约束,评论记录链接到发布记录。
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
创建表格“blog_post”(“id”长整型数字(20.)不零AUTO_INCREMENT,“标题”varchar(One hundred.)核对utf8_unicode_ci不零,“内容”量变核对utf8_unicode_ci不零,“created_at”datetime不零、主关键(“id”) )引擎=InnoDBAUTO_INCREMENT =1默认的字符集= utf8核对= utf8_unicode_ci;创建表格“blog_comment”(“id”长整型数字(20.)不零AUTO_INCREMENT,“post_id”长整型数字(20.)不零,“作者”varchar(20.)核对utf8_unicode_ci不零,“内容”量变核对utf8_unicode_ci不零,“created_at”datetime不零、主关键(“id”),关键“blog_comment_post_id_idx”(“post_id”),约束“blog_post_id”外国关键(“post_id”)参考文献“blog_post”(“id”)在删除级联)引擎=InnoDBAUTO_INCREMENT =1默认的字符集= utf8核对= utf8_unicode_ci;
方法中正确地设置了数据库连接参数.env
文件(或.env.local
覆盖文件)。
从现有数据库构建实体类的第一步是要求Doctrine内省数据库并生成相应的元数据文件。元数据文件描述了基于表字段生成的实体类。
1
$PHP bin/控制台原则:mapping:import“应用程序\实体”注释——路径= src /实体
这个命令行工具要求Doctrine自省数据库并生成带有注释元数据的新PHP类src /实体
.这会生成两个文件:BlogPost.php
而且BlogComment.php
.
提示
也可以将元数据文件生成为XML或最终生成为YAML:
1
$PHP bin/控制台原则:mapping:import“应用程序\实体”xml——路径=配置/学说
在这种情况下,请确保相应调整映射配置:
12 3 4 5 6 7 8 9 10 11 12
#配置/包/ doctrine.yaml原则:#……orm:#……映射:应用:is_bundle:假类型:xml# "yml"在教义v2.6+中被标记为已弃用,并将在v3中被删除dir:“% kernel.project_dir % / config /学说”前缀:“App \实体”别名:应用程序
生成getter和setter或PHP类
生成的PHP类现在有属性和注释元数据,但它们确实有不有任何getter或setter方法。如果您生成XML或YAML元数据,您甚至没有PHP类!
以生成缺少的getter/setter方法(或用于创建类(如果需要),运行:
1 2 3 4 5
//生成getter/setter方法为所有实体$php bin/console make:entity——regenerate App //生成getter/setter方法为一个特定实体$php bin/console make:entity——重新生成应用程序\\ entity \\国家
请注意
如果你想拥有一个OneToMany关系,你需要手动将它添加到实体中(例如添加一个评论
财产博客
)或生成的XML或YAML文件。属性定义的特定实体的部分inversedBy
和的mappedBy
碎片。
生成的实体现在可以使用了。玩得开心!