如何在Doctrine2中的连接表中添加其他列?

时间:2015-07-17 17:06:32

标签: php symfony doctrine-orm doctrine

我想创建一个通知系统。有一个Notification课程。可以将通知分配给多个用户,而不仅仅是一个。

有一个联合表user_notifications,有两列:user_idnotification_id

用户类中$notifications的定义是:

/**
 * @ManyToMany(targetEntity="Notification")
 * @JoinTable(name="user_notifications",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="notification_id", referencedColumnName="id", unique=true)}
 *      )
 **/
private $notifications;

一切正常。但是我想在user_notifications表中添加一个新列,如果给定用户读取了通知,我想要存储。我应该如何在Doctrine2中管理它?

2 个答案:

答案 0 :(得分:2)

您必须重构您的实体以引入新实体并将您的user_notifications邻接表转换为实体。

<强>解决方案

按如下方式对表格进行转换:enter image description here

然后按如下方式重构您的关联:

用户实体

...
/**
 * @OneToMany(targetEntity="UserNotification", mappedBy="notification_id")
 **/
private $notifications;

通知实体

...
/**
 * @OneToMany(targetEntity="UserNotification", mappedBy="user_id")
 **/
private $users;

UserNotification实体

/** @Entity **/
class UserNotification {
...
/**
 * @ManyToOne(targetEntity="User", inversedBy="notifications")
 * @JoinColumn(name="user_id", referencedColumnName="id")
 **/
private $user_id;

/**
 * @ManyToOne(targetEntity="Notification", inversedBy="users")
 * @JoinColumn(name="notification_id", referencedColumnName="id")
 **/
private $notification_id;

/** @Column(type="boolean") */
private $read;

答案 1 :(得分:1)

您需要使用此额外列创建新实体。

您可以在此答案中找到详细信息:https://stackoverflow.com/a/15630665/1348344