首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则2中的自动计数

原则2中的自动计数
EN

Stack Overflow用户
提问于 2015-12-13 22:04:43
回答 1查看 111关注 0票数 1

使用Doctrine 2和Symfony 2.7,我想对数据库中的列使用自动计数。

示例:

因此,当我更新a report时,我希望将用户(它是OneToMany关系的报表的父级)添加到领导板中,并将列completed设置为1 (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');自动化,这样它就获得了当前值,并在其中添加了一个,然后将其刷新到数据库中。

我希望这有什么意义?不知道怎么解释或者在网上搜索..。

EN

回答 1

Stack Overflow用户

发布于 2015-12-14 02:00:03

您可以使用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,或更新该报表的现有领导板实体。

注意,重要的是不要刷新实体,只需将其添加到UOW,如下所示

代码语言:javascript
复制
    $this->getEntityManager()->persist($entity);
    $metaData = $this->getEntityManager()->getClassMetadata($className);
    $this->getUnitOfWork()->computeChangeSet($metaData, $entity);

希望这能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34256947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档