2014-03-26 102 views
0

我有一个关于doctrine2关系和事件的问题。Doctrine2填充关系生成空值

我有关系是这样的:

点:

My\Entity\Point: 
type: entity 
table: null 
manyToOne: 
    user: 
     targetEntity: User 
    game: 
     targetEntity: Game 
fields: 
    id: 
     type: integer 
     id: true 
     generator: 
      strategy: AUTO 
    point: 
     type: integer 
    date: 
     type: datetime 
lifecycleCallbacks: { } 

游戏:

My\Entity\Game: 
type: entity 
table: null 
manyToOne: 
    user: 
     targetEntity: User 
oneToMany: 
    points: 
     targetEntity: Point 
     mappedBy: game 
fields: 
    id: 
     type: integer 
     id: true 
     generator: 
      strategy: AUTO 
    date: 
     type: datetime 
    win: 
     type: boolean 
lifecycleCallbacks: { } 

这样:

  • 一个用户都可以有很多游戏
  • 一个游戏可以有很多个
  • 一个点只能与一个游戏
  • 一个用户可以有多个点

另外,我有一些事件侦听相关

/** 
* @param LifecycleEventArgs $args 
*/ 
public function preUpdate(LifecycleEventArgs $args) { 
    $entity = $args->getEntity(); 

    if ($entity instanceof Game && $args->hasChangedField('win')) { 
     $this->point->setUser($entity->getUser()); 
     $this->point->setGame($entity); 

     switch(true){ 
      case $args->getNewValue('win'): 
       $this->point->setPoint(1); 
       break; 
      case $args->getOldValue('win'): 
       $this->point->setPoint(-1); 
       break; 
      default: 
       break; 
     } 
     $this->haveToBeFlush = true; 
    } 
} 

/** 
* @param PostFlushEventArgs $eventArgs 
*/ 
public function postFlush(PostFlushEventArgs $eventArgs) 
{ 
    if ($this->haveToBeFlush === true) { 
     $eventArgs->getEntityManager()->persist($this->point); 
     $eventArgs->getEntityManager()->flush(); 
    } 
} 
  • 如果用户赢/放松游戏,我想为他创造点(1/-1)。

postFlush后,我可以看到在DB记录是这样的:

id;user_id;point;date;game_id 
6;17;-1;2014-03-26 15:02:01;NULL 

我不知道,为什么出现game_id

回答

0

对了,现在全部清除空值。

第一时刻,我虽然可以出现这个问题,当我与实体,为此我已经创建了事件监听器“postUpdate”。我错了。

问题在于缓存。清除缓存并重新启动apache后,一切正常。