我在这个问题上挣扎了好几个小时......
我有一个Buddy
对象(实体),它持有(应该持有)Preference
个对象。在这个对象里面,我有几个子对象集合。为简单起见,我只用一个子对象解释它。我们称之为University
。它也是它自己的实体。
目前,Buddy
和Preference
与Buddy
的一对一关联,其数据库列preference_id
和Preference
只有{{1}没有别的。
id
和Preference
具有多对多关联,由Doctrine映射为University
表,其中包含buddy_preferences_universities
和preference_id
列。
我的目标是在univeristy_id
和Buddy
之间建立关联,保持所描述的类层次结构,但不需要无用的University
表,即我仍然希望能够发布preferences
和$unis = $buddy->getPreference()->getUniversities
是$unis
集合。
那么,是否可以“跳过”University[]
实体并直接将关联映射到Preference
?
这是由Doctrine buddy_id
创建的表格的图像:
如有必要,我还可以发布类和/或XML映射文件。
谢谢!
答案 0 :(得分:0)
你能不能像这样制作buddy_preferences
表:
id: char(36)
university_id: char(36)
country_id: char(36)
interest_id: char(36)
就像那样,你可以放弃3个连接表。
现在你可以$buddy->getPreference()->getUniversity();
答案 1 :(得分:0)
如何删除模型的Preference
实体,然后与Many2Many
和Buddy
实体的University
关系进行关联。
如果你真的需要保持$buddy->getPreference()->getUniversities()
函数调用以使所有大学与Buddy对象链接,而不是$buddy->getUniversities()
(这听起来更合乎逻辑,但是......),您可以在Buddy
类中添加一个函数,如下所示:
public function getUniversities()
{
return $this->universities;
}
// Now you'll be able to call $buddy->getPreference()->getUniversities()
public function getPreference()
{
return $this;
}
虽然它是满足您需求的解决方案,但我并不认为它是一个良好解决方案。
如果您不需要$buddy->getPreference()
对象,为什么Preference
如此重要?