2015-06-05 61 views
1

一個簡單的商店。用戶在他的餘額賬戶中有錢,當他購買某物時,需要根據購物車的總和來減少餘額。如果付款成功,我有一個重定向的操作。如果是我要減少的平衡是這樣的:Symfony2從數據庫查詢特定值

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

任何想法?

回答

0

我想你可以在類似的事情:

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

不理想,但它應該工作。請注意,如果數據庫中沒有結果,這可能會導致OutOfRangeException

爲什麼不把最後一筆錢存在User本身?或者與User實體有關的其他實體?

此外,請務必通過beginTransaction()commit()在DB事務中包裝該操作。