2014-03-26 101 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後,一切正常。