添加创建的时间戳以连接doctrine2中的表

时间:2013-11-16 00:39:53

标签: php symfony orm doctrine-orm

我的用户实体中有以下属性来跟踪关注者和关注者。基本上用户也可以关注其他用户。我有一个名为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;

2 个答案:

答案 0 :(得分:1)

当您的连接表有两列时,将使用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;
}

答案 1 :(得分:0)

我认为你必须手动创建一个链接实体(entiy1 onetomany linkEntity manytoone entity2。 因为,通常的链接实体是自动化的,应该尽可能简单和(数据较少),所以学说可以采取所有的控制, 想象你需要得到时间戳,你怎么能在(没有硬编码的)实体上做,你需要一个getter,并且注释不应该包含代码。