如何在TYPO3中编写用于更新的extbase存储库方法?

时间:2018-04-23 09:30:59

标签: typo3 typo3-7.6.x typo3-8.x typo3-extensions

我在TYPO3中编写了一个更新查询,现在我需要将其更改为查询对象存储库方法。如何更改下面的代码?

public function updatePaymentDetails($uid, $txnID, $amt, $stats)
{
    $itemUID = $uid;
    $transID = $txnID;
    $amountPaid = $amt;
    $txStatus = $stats;
    $tableName = 'tx_paypalpayment_domain_model_transactions AS tpp';
    $whereCondition = 'tpp.uid=' . '"' . $itemUID . '"';
    $setValues = ['transactionid' => $transID, 'amount' => $amountPaid, 'txnstatus' => $txStatus];
    $result = $GLOBALS['TYPO3_DB']->exec_UPDATEquery($tableName, $whereCondition, $setValues);
    return $result;
}

我用自己的想法创造了这么多(不知道它是否正确),剩下的部分应该是什么?

public function paymentUpdate($uid, $txnID, $amt, $stats) {
   $query = $this->createQuery();
   $query->matching(
      $query->logicalAnd(
         $query->equals("transactionid", $txnID),
         $query->equals("amount", $amt),
         $query->equals("txnstatus", $stats)
      )
   );

   /*---   Update Code   ---*/

   return $query->execute();
}

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

TYPO3 / Extbase方法首先从持久层获取事务,然后将更改应用于域对象,然后在存储库中更新它。

控制器操作中的以下内容:

$transaction = $this->transactionRepository->findByIdentifier($itemUid);
$transaction->setTransactionId($transID);
$transaction->setAmount($amountPaid);
$transaction->setStatus($txStatus);
$this->transactionRepository->update($transaction);

如果您想直接更新而不是首先获取记录,请查看\TYPO3\CMS\Core\Database\Query\QueryBuilder(仅适用于较新版本的TYPO3 - 8.7及更高版本)。在旧版本的TYPO3中,您可以查看$GLOBALS['TYPO3_DB']->exec_*