一家简单的商店。用户的余额帐户中有钱,当他购买东西时,需要根据购物车的总和来减少余额。如果付款成功,我有一个重定向的操作。如果是这样,我想减少余额:
/**
* @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()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句