为文章类和评论类添加关联关系-Symfony5全面开发

您需要登录后才可观看此视频

为了更好的为您提供服务,请您登录后再查看本课程。

立即登录

文章和评论之间存在着关联关系,一篇文章可以有多条评论,而每一条评论它只能属于一篇文章,这就是典型的一对多关系。我们可以通过在Post类中添加属性的方式,让Post类和Comment类建立关系。

打开底部控制台,继续输入symfony console make:entity命令,来为Post类添加属性,属性名称我们叫做comments,这是一个复数。字段的类型,我们输入问号来查看可用的类型。在这里,它有4种关系类型,分别是多对一、一对多、多对多和一对一。

我们现在是为Post类添加属性,Post类对于comments属性,一篇文章可以有多条评论,所以是一对多的关系。我们这里输入OneToMany ,这个关系会指向于哪个类?我们输入Comment,一个新的属性将会添加到Comment类中,新属性的名称是post属性,我们默认就可以了。

回车,评论的文章属性是否可以为空?,当然不能为空,输入no。这里是orphanRemoval就是孤儿属性的删除,在一对多关系的表单提交时,这个设置会有用。在后面讲解表单提交时,我们会讲解这个属性。这里暂时设置为yes。

不需要添加其他属性,回车。我们看一下两边代码的修改。

在Post中,命令行工具为我们添加了comments属性。comments属性它是一个集合对象,这个集合中可以存储多条Comment对象。我们往下看 对于集合属性,它有添加对和删除对象的方法。

我们再看Comment类,Comment类中,它为我们添加了post属性,post属性是Post类的实例,通过inversedBymappedBy使两个类建立起了关联关系。

#inversedBy和mappedBy文档
https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/unitofwork-associations.html

添加关联关系对于初学者,很容易把关系双方搞混。我们再次打开控制台,输入symfony console make:entity命令,修改Post类,这次我们演示一下如何使用向导的方式来添加关联关系。

我要临时创建一个comments属性,再次输入问号,关系类型上有一个relation type,它将会以向导的方式帮助我们添加关联关系。回到底部,我们输入relation,你将会与哪个类建立关联关系,我们输入Comment,它会生成一个向导来帮助我们建立关系。

多对一关系,每个文章只有一篇评论,每个评论有多个文章,这明显不是我们要的。
一对多关系,每篇文章可以有多条评论对象,每条评论对象它只是属于一个文章。
多对多关系,每篇文章可以有多条评论,每个评论可以关联到多个文章。
一对一关系,每个文章只有一个评论,每个评论也只能关联到一个文章。

只有一对多是我们想要的,我们使用向导的方式创建了一对多关系和多对一关系它都是双向的,我们回到浏览器,搜索doctrine onetomany文档,我们看一下关系映射的类型。

它可以有单向多对一单向一对一双向一对一自引用的一对一一对多通过添加表的方式实现单向的一对多自引用的一对多单向的多对多双向的多得多自引用的多对多。这里一共有很多种类型的,我们在后面课程用到的时候会详细讲解。

#doctrine关系映射文档
https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#association-mapping

在下一节,我们将创建一个文章工厂用来为我们生成文章实例。

课程讨论

当前内容评论功能已关闭。