簡體   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