2015-12-13 102 views
1

使用Doctrine 2和Symfony 2.7我想在我的分貝中使用自動計數的列。在教義2中的自動計數

例子:
所以,當我更新的報告,我想與列完成設置爲添加用戶(這是一個一對多的關係,報告的父級)對排行榜(setCompleted)。當用戶已經在排行榜上時,我想找到他並且添加1到完成的任務值。

if (!$lb) { 
     $new = New Leaderboard(); 
     $new->setUsers($user) 
      ->setCompleted('1'); 
     $em->persist($new); 
    } else { 
     $update = $em->getRepository('AppBundle:Leaderboard')->findBy(array('user' => $user)); 
     $update->setCompleted('2'); 
    } 

所以基本上我想要的$update->setCompleted('2');自動化,這樣需要的電流值,並增加了一個到,然後刷新該數據庫。

我希望這有什麼意義?不知道如何解釋或在線搜索...

回答

0

您可以使用onFlush偵聽器觀看您的報表實體的更新和增加/創建排行榜條目取決於報告的狀態。

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/events.html#onflush

需要一點(小心)讀,但它會做你想要什麼。

這裏有幾個問題,我或多或少同一主題回答的例子,應該讓你開始相當快

Track field changes on Doctrine entity

Persisting other entities inside preUpdate of Doctrine Entity Listener

你想要的基本流程是捕獲更新到報告(我的答案下更簡單的第二個例子顯示這是爲一個實體完成的)。然後根據Report的狀態,創建一個新的Leaderboard實體並將其附加到Report,或更新該報告的現有Leaderboard實體。

注意它不刷新的實體,只是把它添加到UOW像這樣

$this->getEntityManager()->persist($entity); 
    $metaData = $this->getEntityManager()->getClassMetadata($className); 
    $this->getUnitOfWork()->computeChangeSet($metaData, $entity); 

希望幫助是很重要的!

+0

非常感謝,今晚我會看看它。你可能知道這個「快速/骯髒」的修復嗎?我有一個下週測試版的截止日期。我想盡快得到這個工作... – nclsvh

+0

我已經添加了一些額外的信息給我的答案! – Richard