2016-09-06 48 views
0

我在我的项目中使用FOSMessage(https://github.com/FriendsOfSymfony/FOSMessage),我想覆盖实体的表名。Symfony 3 |覆盖实体表名

例如在FOSMessage(\ FOS \信息\驱动程序\原则\ ORM \实体\对话),我有:

/** 
* @ORM\Table(name="fos_message_conversations") 
* @ORM\Entity 
*/ 
class Conversation extends BaseConversation 
... 
// properties 
... 

而在我的自定义实体,我做的:

/** 
* @ORM\Table(name="user__message__fos_message_conversations") 
* @ORM\Entity 
*/ 
class Conversation extends \FOS\Message\Driver\Doctrine\ORM\Entity\Conversation 
{ 

} 

它的工作原理,但只适用于“无关系”属性。有“一对多”关系的属性,并且被忽略。 当我更新我的数据库时,我只有文本属性和id。例如,我没有“消息”关系。

我该怎么办?我只想改变表名。

回答

1

oneToMany需求上many侧关联映射,因此,你将还需要定制Message实体映射manyToOne指向您的自定义Conversation

这是因为实际上在RMDBS中,外键是many旁边的表,在这种情况下是message表。消息中有一列conversation_id,反之亦然。

+0

嗨dragoste,谢谢你的回答,这很清楚。所以没有办法只创建自定义类,从Bundle中的扩展并更改table_name?我必须重新创建所有关系属性并用新的自定义实体重写关系“OneToMany”? – Aximem

+0

是的。你会如何想象呢? 'Message :: conversation_id'指向哪里?您的自定义'对话'或FOS的'\ FOS \消息\驱动\ Doctrine \ ORM \实体\对话'?那么,它被映射到FOS的班级,这就是你的问题来自哪里。 –

+0

是的,我明白了,我只是感到惊讶,我们无法在不扩展它的情况下更改捆绑实体表名称。而当我们扩展它时,我们必须重写属性,但好吧,我明白了。谢谢dragoste – Aximem