Symfony 3 |覆盖实体表名称

时间:2016-09-06 21:40:36

标签: entity bundle symfony extends

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

例如在FOSMessage(\ FOS \ Message \ Driver \ Doctrine \ ORM \ Entity \ Conversation)中我有:

@Entity
@Table(name = "Project")
public class ProjectDTO implements java.io.Serializable {

    private Integer idproject;
    private UserDTO FKUser;

    public ProjectDTO() {
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "IDProject", unique = true, nullable = false)
    public Integer getIdproject() {
        return this.idproject;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FKUser", referencedColumnName = "IDUser")
    public UserDTO getUserDTO() {
        return FKUser;
    } 
}

在我的自定义实体中,我这样做:

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

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

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

1 个答案:

答案 0 :(得分:1)

oneToMany需要many方面的关联映射,因此您还需要自定义Message实体,其中地图manyToOne指向您的自定义Conversation

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