2015-12-13 66 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