将创建的时间戳添加到doctrine2中的联接表中


adding created timestamp to join table in doctrine2

我在User实体中有以下属性来跟踪追随者和追随者。基本上,用户也可以跟随其他用户。我有一个名为app_user_follow_user的联接列,但我也想添加一个时间戳,说明每当有人跟踪另一个用户时,何时发生。如何通过此ORM指定创建的时间戳?

/**
 * @ORM'ManyToMany(targetEntity="User", mappedBy="following")
 */
protected $followers;
/**
 * @ORM'ManyToMany(targetEntity="User", inversedBy="followers")
 * @ORM'JoinTable(name="app_user_follow_user",
 *      joinColumns={@ORM'JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM'JoinColumn(name="follow_user_id", referencedColumnName="id")}
 *      )
 */
protected $following;

Doctrine ManyToMany关系在联接表有两列时使用。如果需要添加另一列,则必须在两侧将关系转换为OneToMany,在已联接实体上将关系转换为ManyToOne。

这是完全未经测试的,但希望它能给你要点。

用户实体

/**
 * @ORM'OneToMany(targetEntity="AppUserFollowUser", mappedBy="appUser")
 */
protected $followers;
/**
 * @ORM'OneToMany(targetEntity="AppUserFollowUser", mappedBy="followUser")
 */
protected $following;

AppUserFollowUser实体

/**
 * @ORM'Table(name = "app_user_follow_user")
 */
class AppUserFollowUser
{
    /**
     * @ORM'Id
     * @ORM'ManyToOne(targetEntity="User", inversedBy="followers")
     * @ORM'JoinColumns({
     *   @ORM'JoinColumn(name="user_id", referencedColumnName="id")
     * })
     */
    private $appUser;
    /**
     * @ORM'Id
     * @ORM'ManyToOne(targetEntity="User", inversedBy="following")
     * @ORM'JoinColumns({
     *   @ORM'JoinColumn(name="follow_user_id", referencedColumnName="id")
     * })
     */
    private $followUser;
    /**
     * @ORM'Column(name="created_date", type="datetime", nullable=false)
     */
    private $createdDate;
}

我认为您将不得不手动创建一个链接实体(entiy1 onetomany linkEntity manytone entity2。因为,通常的链接实体是自动化的,应该尽可能简单(无数据(,所以条令可以控制它,想象一下,您需要获取时间戳,如何在一个(非硬编码的(实体上执行,您将需要一个getter,并且注释不应该包含代码。