如何从一个现有的数据库生成实体
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何从一个现有的数据库生成实体
当开始工作在一个全新的项目,使用了一个数据库,两个不同的情况是天生的。在大多数情况下,数据库模型是从头开始设计和建造的。但是,有时候你会可能与现有的和不变的数据库模型。幸运的是,教义附带了一些工具来帮助从你现有的数据库生成模型类。
请注意
随着教义的工具文档欧宝官网下载app说,逆向工程是一个一次性的过程开始于一个项目。学说能够将大约70 - 80%的必要的基于字段的映射信息,索引和外键约束。原则不能发现逆关联,继承类型、实体主键与外键或语义关联的操作如瀑布或生命周期事件。一些额外的工作之后生成的实体将是必要的设计每一个适合您的域模型特异性。
本教程假设您使用的是一个简单的博客应用程序使用以下两个表:blog_post
和blog_comment
。评论与一篇文章记录由于外键约束。
1 2 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;
之前的配方,确保您的数据库连接参数的正确设置应用程序/配置/ parameters.yml
文件(或者无论你的数据库配置保存),你已经初始化一个包,将你未来的实体类。在本教程中它是假定存在一个AcmeBlogBundle,坐落在src / Acme / BlogBundle
文件夹中。
第一步从现有数据库构建实体类是问教义内省数据库并生成相应的元数据文件。元数据文件描述实体类来生成基于表字段。
1
php应用程序/控制台学说:美元AcmeBlogBundle xml映射:进口——力量
这个命令行工具要求教义反省下的数据库并生成XML元数据文件src / Acme / BlogBundle /资源/ config /学说
你的包文件夹。这个生成两个文件:BlogPost.orm.xml
和BlogComment.orm.xml
。
提示
也可以生成元数据文件在YAML格式通过改变最后一个参数yml
。
生成的BlogPost.orm.xml
元数据文件看起来如下:
1 2 3 4 5 6 7 8 9 10 11
< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><doctrine-mappingxmlns=“http://doctrine-project.org/schemas/orm/doctrine-mapping”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd”><实体的名字=“Acme \ BlogBundle \实体\博客”表=“blog_post”><id的名字=“id”类型=“长整型数字列=“id”><发电机策略=“身份”/ >< /id><场的名字=“标题”类型=“字符串”列=“标题”长度=“100”可以为空=“假”/ ><场的名字=“内容”类型=“文本”列=“内容”可以为空=“假”/ ><场的名字=“createdAt”类型=“datetime”列=“created_at”可以为空=“假”/ >< /实体>< /doctrine-mapping>
元数据文件生成后,你可以问学说构建相关实体类通过执行以下两个命令。
1 2
美元php应用程序/控制台学说:映射:将注释。美元/ src php应用程序/控制台学说:AcmeBlogBundle生成:实体
第一个命令与注释生成实体类映射。但如果你想使用YAML或XML映射注释,而是你应该只执行第二个命令。
谨慎
如果你想使用注释,您必须删除XML或YAML文件运行这两个命令之后。这是必要的不可能混合映射配置格式
例如,新创建的BlogComment
实体类似乎遵循:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
/ / src / Acme / / BlogComment.php BlogBundle /实体名称空间Acme\BlogBundle\实体;使用学说\ORM\映射作为ORM;/ * * * Acme \ BlogBundle \实体\ BlogComment * *@ORM\表(name = " blog_comment ") *@ORM实体\ * /类BlogComment{/ * * *@var* *美元整数id@ORM\列(name = " id ", type = "长整型数字")*@ORM\ Id *@ORM\ GeneratedValue(策略= "身份")* /私人美元id;/ * * *@var字符串$作者* *@ORM\列(name = "作者",类型=“字符串”,长度= 100,可空= false) * /私人美元作者;/ * * *@var文本内容* *美元@ORM\列(名称=“内容”,类型=“文本”,可空= false) * /私人美元内容;/ * * *@vardatetime createdAt美元* *@ORM\列(name = " created_at " type = " datetime, nullable = false) * /私人美元createdAt;/ * * *@varBlogPost * *@ORM\ ManyToOne (targetEntity = "博客")*@ORM\ JoinColumn (name = " post_id " referencedColumnName = " id ") * /私人美元帖子;}
正如你所看到的,原则将所有表字段转换为纯粹的私人和注释的类属性。最令人印象深刻的是,它还发现了关系博客
实体类基于外键约束。因此,你可以找到一个私人美元的帖子
属性映射的博客
实体的BlogComment
实体类。
请注意
如果你想有一对多的关系,您将需要手动添加到实体或生成的XML或YAML文件。添加一个一对多的特定实体定义部分inversedBy
和的mappedBy
碎片。
现在可以使用生成的实体。玩得开心!