/** * Get one Transfer::STATE_COLLECT transfer to bundle. If none exists one * will be created. If the users state is NOT paid the state will set * to Transfer::STATE_RESERVED. * * NOTE: This transfer wont get saved by this method! * * @param PropelPDO $con * @return [type] */ public function getCurrentTransferBundle($currency, PropelPDO $con) { // $transfer = TransferQuery::create() // ->filterByState([Transfer::STATE_COLLECT, Transfer::STATE_RESERVED]) // ->filterByMember($this) // ->orderBy(TransferPeer::STATE, Criteria::DESC) // ->findOne($con); // SELECT * FROM ... FOR UPDATE // to ensure consistency through table row lock $sql = "SELECT * FROM " . TransferPeer::TABLE_NAME . " WHERE" . " member_id = :member_id AND" . " currency = :currency AND" . " state in (" . Transfer::STATE_COLLECT . ", " . Transfer::STATE_RESERVED . ")" . " ORDER BY state desc" . " FOR UPDATE"; $stmt = $con->prepare($sql); $stmt->execute(array(':member_id' => $this->getId(), ':currency' => $currency)); $formatter = new PropelObjectFormatter(); $formatter->setClass('Transfer'); $transfer = $formatter->format($stmt); if (count($transfer) > 0) { $transfer = $transfer[0]; } else { $transfer = null; } if (!$transfer) { $transfer = new Transfer(); $transfer->setMember($this); $transfer->setCurrency($currency); if (!$this->hadPaid()) { $transfer->setState(Transfer::STATE_RESERVED); } } return $transfer; }