上下文:
我用symfony2开发了一个Rest API。我使用Doctrine,FOSUserBundle和FOSRestBundle
我用注释配置我的实体。我用控制台生成了我的实体。
我有两个实体:User
和Plan
User
扩展了FOSUserBundle的FOS \ UserBundle \ Model \ User
这两个实体通过双向ManyToOne
关系链接(一个计划的用户数量很多)
所以我在我的数据库的plan_id
表中有一个int(11)类型的外键user
这是我的实体的代码:
计划:
class Plan implements PlanInterface
{
/* ... */
/**
* @ORM\OneToMany(targetEntity="...\UserBundle\Entity\User", mappedBy="plan")
*/
private $users;
public function __construct()
{
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
/* ... */
}
用户:
class User extends BaseUser
{
/* ... */
/**
* @ORM\ManyToOne(targetEntity="...\PlanBundle\Entity\Plan", inversedBy="users")
* @ORM\JoinColumn(columnDefinition="INT(11) default '1'")
*/
private $plan;
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
}
/* ... */
}
问题:
我希望在创建新用户时,在表plan
的列plan_id
中放置一个默认值(值为1的int,表示表user
的第一个条目)
我希望我很清楚,
提前谢谢。
答案 0 :(得分:0)
为此,您可以使用活动订阅者。
只要你打电话给$em->persist($user)
,就会调用听众,你可以执行任何你希望的行动。
class DefaultPlanSubscriber implements \Doctrine\Common\EventSubscriber
{
public function getSubscribedEvents()
{
return array(
'postPersist'
);
}
public function postPersist(\Doctrine\ORM\Event\LifecycleEventArgs $args)
{
$em = $args->getEntityManager();
$user = $args->getEntity();
if (false === $user instanceof \MyBundle\Entity\User) {
return;
}
// Select plan by ID or some other sophisticated method of determining default.
if(null === $plan = $em->getRepository('MyBundle:Plan')->find(1)) {
return;
}
$user->setPlan($plan->addUser($user));
}
}