我想查詢使用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