在Doctrine中定义Join Table的结构

时间:2014-07-24 10:55:18

标签: php symfony doctrine many-to-many

我在用户和内容之间定义了ManyToMany关系,如下所示:

/**
 * @ORM\ManyToMany(targetEntity="Acme\UserBundle\Entity\User")
 * @ORM\JoinTable(name="acme_content_likes")
 */
private $user_likes;

如果用户喜欢将关系写入表格的内容,那么一切都很有效。但是,连接表只有两列, user_id和content_id 。我真的需要关注内容的日期和时间(出于统计原因)。

此处也没问题,我在表上的UPDATE列上创建了TIMESTAMPABLE(通过phpMyAdmin),因此每次添加new时都会插入日期。

问题是当我尝试在控制台中运行SCHEMA更新时:

php app/console doctrine:schema:update --force

然后,操作将删除数据库中新创建的TIMESTAMPABLE列:

ALTER TABLE acme_content_likes DROP date;

有没有办法可以配置我的实体,所以即使在SCHEMA更新中我也可以将Date保留在Join表中?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我不认为简单的连接表是您的解决方案,即使您确实想要记录表连接的日期。

可能的解决方案可能是:

  • 当用户更改其记录的特定点以及更改内容时,会有一个记录系统。
  • 如果您需要在联接表中记录更多数据,请自行创建具有两个many to one关系的联接表。

我会选择第二个。 (我实际上已经这样做了)


原则是正确的,不要让你弄乱连接表。


编辑以使其更有用。

我过去曾使用过一个symfony包来记录所有的学说行为,它是loggable extension