Symfony2从数据库中查询特定值

时间:2015-06-05 13:32:02

标签: php mysql symfony

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

  /**
     * @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

根据我的查询,我总是得到第一个输入,whitch是50.00。我需要得到最后一个(或当前输入)。我怎样才能做到这一点?有可能做这样的事情:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

不理想,但应该有效。请注意,如果数据库中没有结果,则可能会抛出OutOfRangeException

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

此外,请务必通过beginTransaction()commit()将该操作包装在数据库事务中。