如何从一个现有的数据库生成实体

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.0,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何从一个现有的数据库生成实体

当开始工作在一个全新的项目,使用了一个数据库,两个不同的情况是天生的。在大多数情况下,数据库模型是从头开始设计和建造的。但是,有时候你会可能与现有的和不变的数据库模型。幸运的是,教义附带了一些工具来帮助从你现有的数据库生成模型类。

请注意

随着教义的工具文档欧宝官网下载app说,逆向工程是一个一次性的过程开始于一个项目。学说能够将大约70 - 80%的必要的基于字段的映射信息,索引和外键约束。原则不能发现逆关联,继承类型、实体主键与外键或语义关联的操作如瀑布或生命周期事件。一些额外的工作之后生成的实体将是必要的设计每一个适合您的域模型特异性。

本教程假设您使用的是一个简单的博客应用程序使用以下两个表:blog_postblog_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.ini文件(或者无论你的数据库配置保存),你已经初始化一个包,将你未来的实体类。在本教程中假定一个AcmeBlogBundle存在,坐落在src / Acme / BlogBundle文件夹中。

第一步从现有数据库构建实体类是问教义内省数据库并生成相应的元数据文件。元数据文件描述实体类来生成基于表字段。

1
美元php应用程序/控制台学说:映射:将xml。/ src / Acme / BlogBundle /资源/ config /理论/元数据/ orm——从数据库——的力量

这个命令行工具要求教义反省下的数据库并生成XML元数据文件src / Acme / BlogBundle /资源/ config /理论/元数据/ orm你的包文件夹。

提示

也可以生成元数据类YAML格式通过改变第一个参数“yml”。

生成的BlogPost.dcm.xml元数据文件看起来如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><doctrine-mapping><实体的名字=“博客”=“blog_post”><change-tracking-policy>DEFERRED_IMPLICIT< /change-tracking-policy><id的名字=“id”类型=“长整型数字=“id”><发电机策略=“身份”/ >< /id><的名字=“标题”类型=“字符串”=“标题”长度=“100”/ ><的名字=“内容”类型=“文本”=“内容”/ ><的名字=“发表”类型=“布尔”=“is_published”/ ><的名字=“createdAt”类型=“datetime”=“created_at”/ ><的名字=“updatedAt”类型=“datetime”=“updated_at”/ ><的名字=“鼻涕虫”类型=“字符串”=“鼻涕虫”长度=“255”/ ><lifecycle-callbacks/ >< /实体>< /doctrine-mapping>

请注意

如果你有对多您的实体之间的关系,您将需要编辑生成的xmlyml文件添加一个部分的特定实体对多定义inversedBy的mappedBy碎片。

元数据文件生成后,你可以问原则导入模式和建立相关的实体类通过执行以下两个命令。

1 2
$ php应用程序/控制台学说:映射:进口AcmeBlogBundle注释php应用程序/控制台学说:美元AcmeBlogBundle生成:实体

第一个命令生成实体类映射注释,但是你当然可以改变注释参数xmlyml。新创建的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 52 53
< ? php/ / src / Acme / / BlogComment.php BlogBundle /实体名称空间Acme\BlogBundle\实体;使用学说\ORM\映射作为ORM;/ * * * Acme \ BlogBundle \实体\ BlogComment * *@ORM\表(name = " blog_comment ") *@ORM实体\ * /BlogComment{/ * * *@var长整型数字* * $ id@ORM\列(name = " id ",类型=“长整型数字”,可空= false) *@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实体类。

最后一个命令生成的所有为你的两个getter和setter博客BlogComment实体类的属性。现在可以使用生成的实体。玩得开心!

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。