我想查询使用consolibyte quickbooks php工具包分配给发票的所有付款。我希望我可以使用查询将其撤回,但到目前为止,我唯一可以看到的方法是获取所有付款,然后遍历并检查LinkedTxn数组中的内容,并检查它是否包含“Invoice”类型'并且'TxnId'的值与我存储的发票ID相匹配。我有什么到目前为止,这是它得到了付款,但显然不是一个选项前进,因为可能会支付数万系统:Quickbooks - 选择发票的所有付款
public function getAllPaymentsForInvoice(Invoice $invoice)
{
$query = "SELECT * FROM Payment";
$payments = $this->qbPaymentService->query($this->context, $this->realm, $query);
$lines = [];
foreach ($payments as $payment) {
$num_lines = $payment->countLine();
for ($i = 0; $i < $num_lines; $i++) {
$line = $payment->getLine($i);
$txnId = $this->parseResponse($line->getLinkedTxn()->getTxnId());// convert {-1} to 1
$txnType = $line->getLinkedTxn()->getTxnType();
if ($txnType == 'Invoice' && $txnId == $invoice->qb_ref) {
$lines[] = $line;
}
}
}
return $lines;
}
任何人都可以把我在一个更好的办法的方向?
喜基思。只是注意到你发布了一个答案。迄今为止,我的解决方案涉及从发票中获取关联交易,将它们内化,然后在支付表上查询ID位于字符串中的支付。例如:“SELECT * FROM Payment WHERE Id IN('”。implode(“','”,$ paymentIds)。“')”。其中$ paymentIds已经过预处理以获取发票中的所有关联交易。这似乎正在做我所需要的。这对你来说似乎是一个很好的解决方案吗? – Steven1978
这个解决方案与“IN(..)”完美结合,IMO应该是一个被接受的答案 – Aramir