亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel,有沒有辦法將整個表與數組同步?

Laravel,有沒有辦法將整個表與數組同步?

墨色風雨 2021-12-24 10:14:46
有一個客戶端 - 服務器的 API 調用,它返回大約 600 的發票,因為它們沒有優化,所以需要最多 2.3 分鐘的時間。所以有一個條件,我需要用 過濾數據paid: false,我也這樣做了。之后,我將記錄存儲在我的數據庫中以跟蹤發票并添加評論和發送提醒。問題是有一種情況,如果發票變成Paid: true那么它將在過濾器中被忽略,那么我將如何更新我的表,因為它在那里仍然是假的。    $response = collect(\GuzzleHttp\json_decode($response->getBody()->getContents()));            $filtered = $response->filter(function ($value, $key) use ($now) {                return ($value->paid == false && $value->dueDate <= $now);            });            $this->saveInvoices($filtered);    public function saveInvoices($filtered)        {            foreach ($filtered as $val) {                $item = collect($val);                array_push($this->filteredResults, $item->only(['invoiceNumber', 'customerId', 'customerName', 'dueDate', 'invoiceDate', 'amountInOriginalCurrency', 'paid'])->toArray());            }            foreach ($this->filteredResults as $item) {                UnpaidInvoices::updateOrCreate(                    ['invoiceNumber' => $item['invoiceNumber']],                    ['invoiceNumber' => $item['invoiceNumber'],                        'customerId' => $item['customerId'],                        'customerName' => $item['customerName'],                        'dueDate' => $item['dueDate'],                        'invoiceDate' => $item['invoiceDate'],                        'amountInOriginalCurrency' => $item['amountInOriginalCurrency'],                        'paid' => $item['paid']]);            }        }
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

您想更新所有收到的發票的信息,但將唯一未支付的發票保存到$this->filteredResults. 您可以在$this->saveInvoices()方法中移動“過濾器邏輯” ,這將解決問題。


$response = collect(\GuzzleHttp\json_decode($response->getBody()->getContents()));

$this->saveInvoices($response);



public function saveInvoices($invoices)

{

    foreach ($invoices as $item) {

        //If it wasn't paid and dueDate not passed, then save it to $this->filteredResults

        if(($item['paid'] === false) && ($item["dueDate"] <= $now)){

            $collection = collect($item);

            array_push($this->filteredResults, $collection->only(['invoiceNumber', 'customerId', 'customerName', 'dueDate', 'invoiceDate', 'amountInOriginalCurrency', 'paid'])->toArray());

        }


        //Then update invoice information, regardless of paid status

        UnpaidInvoices::updateOrCreate(

            ['invoiceNumber' => $item['invoiceNumber']],

            ['invoiceNumber' => $item['invoiceNumber'],

             'customerId' => $item['customerId'],

             'customerName' => $item['customerName'],

             'dueDate' => $item['dueDate'],

             'invoiceDate' => $item['invoiceDate'],

             'amountInOriginalCurrency' => $item['amountInOriginalCurrency'],

             'paid' => $item['paid']]);

    }

}


查看完整回答
反對 回復 2021-12-24
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

  1. 確保您在 DB 中設置了良好的索引。

  2. 僅從后端返回您真正需要的內容(前端沒有過濾)

  3. 在檢索集合/數組后,更新記錄更改應是一個單獨的調用,可能最簡單的方法是再次調用以獲取最新結果(第 1 點)。


查看完整回答
反對 回復 2021-12-24
  • 2 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號