2017-10-19 132 views
2

我有一个:Symfony的CollectionType没有实体

class Q&A 
{ 
    private $question 
    private $answer 
} 

我需要的Q&A个集合(CollectionType),但没有反侧实体在我的模型(Q&A实体有没有多对一关系任何其他实体)。

问题

什么是我选择这里?

我也有:

class Page 
{ 
    @ORM\OneToMany(targetEntity="Content") 
    private $contents; 
} 

我想过使得Page类作为abstract并创建一个独立的实体为每个页面类型,分别来自Page继承。

这样我可以

class Q&APage 
{ 
    @ORM\OneToMany(targetEntity="Q&A") 
    private $q&as; 
} 

但它不是一个大的网站,我有喜欢它5个不同的页面类型,我觉得这将是矫枉过正为每个页面类型不同的实体。

+0

创建一个模型类(例如'的appbundle \模型\ QACollection'),可容纳'的appbundle \实体\ QA'的阵列和形式与该关联。 – ccKep

+0

谢谢,我真的想过那个。现在工作正常! – yurden

回答

0

首先这与Symfony无关。这是一个学说的东西。顺便说一句,你没有矫枉过正,因为你的模型应该是合理的,让你开发你的代码库。

有存在,因此很多情况下,程序员,设计了一个畸形的模式,并陷入困境,同时通过开发代码库去。

这一切后,你怎么知道:

这不是一个大的网站

?今天的许多大网站从一开始就没有那么大。所以这将是一个很好的做法对你作为一个开发人员去尝试,不说笑了模型设计

所提出的设计看起来不错,说实话,你需要为您的模型数据结构有很好的理解。

你需要有一个:

class QuestionAndAnswer 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="QuestionAndAnswerPage", inversedBy="questionAndAnswers") 
    */ 
    private $questionAndAnswerPage; 
} 

和:

class QuestionAndAnswerPage 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="QuestionAndAnswer", mappedBy="questionAndAnswerPage") 
    */ 
    private $questionAndAnswers; 
} 

提示:尝试使用完整的英语单词和短语的所有的时间,因为这是在面向对象的最佳实践世界。请记住,您的用户不需要阅读它们。他们在那里让你不会被卡在未来的格格不入的短语中。

+0

非常感谢编辑我原来的帖子和这个答案! – yurden

+0

对不起,我发送了以前的评论没有完成它,现在不能编辑。 我的意思是“它不是一个大网站”,它不会变得很大,它真的是一个非常小的本地工作室展示网站,现在已经有10年的规模了,我只是在提醒它。很高兴知道我的想法很好。 在你回答之前,我已经使用了ccKep的建议,它效果很好,你还觉得我需要切换到这个模型设计吗? 同样感谢您使用完整单词的提示! – yurden

+0

一个好的模型设计的度量标准在互联网上已经存在,但是整个模型的内容来自问题领域,您将要解决。实体和它们的名称应该真的存在那里。例如,如果我是你,我不会选择一个名为'Content'的实体,因为这没有多大意义。几乎所有内容。您应该对模型设计过程中的实体更具体。 – Trix

相关问题