繁体   English   中英

Symfony2从数据库查询特定值

[英]Symfony2 querying a specific value form the database

一家简单的商店。 用户的余额帐户中有钱,当他购买东西时,需要根据购物车的总和来减少余额。 如果付款成功,我有一个重定向的操作。 如果是这样,我想减少余额:

  /**
     * @Route("/successfull", name="successfull_purchase")
     * @Template("MediaparkLtUserBundle:User:paymentConfirmed.html.twig")
     */
    public function successfullPurchaseAction(Request $request) {
        $currentUser = $this->getCurrentUser(); // logged users id
        $em = $this->getEntityManager();
        $user = $em->getRepository('MediaparkLtUserBundle:User')->find($currentUser);
        $pay = $em->getRepository('MediaparkLtUserBundle:AccountMovement')->findOneBy(array('user'=>$currentUser));
        $sum = $pay->getAmount();
        $balance = $user->getNonpayableFunds();
        $newBalance = $balance - $sum;

        $user->setNonpayableFunds($newBalance);

        $em->persist($user);
        $em->flush();
        return array('user' => $user, 'pay'=> $pay);
    }

如您所见,即时查询两个表。 在用户表中即时获取当前用户。 在AccountMovement中,我正在基于该用户进行移动。

因此,我试图在特定时间获取金额,但我始终会获得首次购买。

例如:

AccountMovement表:

id-1
user_id - 5
amount - 50.00

id-2
user_id - 5
amount - 5.00

使用我的查询,我总是得到第一个输入,抽动是50.00。 我需要获取最后一个(或当前输入)。 我怎样才能做到这一点? 是否可以做这样的事情:

$pay = $em->getRepository('MediaparkLtUserBundle:AccountMovement')->findOneBy(array('user'=>$currentUser, 'DESC')); (to get the last input)??

有任何想法吗?

我认为您可以做类似的事情:

$pay = $em->getRepository('MediaparkLtUserBundle:AccountMovement')
        ->findBy(array('user'=>$currentUser), array('id' => 'DESC'), 1)[0];

不理想,但应该可以。 请注意,如果数据库中不存在任何结果,则可能会抛出OutOfRangeException

为什么不将最后一笔钱存入User本身? 还是与User实体相关的其他实体?

另外,请确保通过beginTransaction()commit()在数据库事务中包装该动作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM