簡體   English   中英

Laravel插入/更新/刪除

[英]Laravel Insert/Update/Delete

我目前在下面有此代碼,但是當添加約2000行時,由於處於foreach循環中,因此運行速度太慢。

foreach($tables as $key => $table) {

    $class_name = explode("\\", get_class($table[0]));
    $class_name = end($class_name);

    $moved = 'moved_' . $class_name;
    ${$moved} = [];

    foreach($table[0]->where('website_id', $website->id)->get() as $value) {
        $value->website_id = $live_website_id;
        $value->setAppends([]);
        $table[0]::on('live')->updateOrCreate([
            'id' => $value->id,
            'website_id' => $value->website_id
        ], $value->toArray());
        ${$moved}[] = $value->id;
    }

    // Remove deleted rows
    if ($table[1]) {
        $table[0]::on('live')->where([ 'website_id' => $live_website_id ])
            ->whereNotIn('id', ${$moved})
            ->delete();
    }
}

發生的事情基本上是用戶將在開發服務器中添加/更新/刪除數據,然后當他們按下按鈕時,該數據需要被推送到活動表中,保留該ID,因為實時的自動增量ID將無法使用查找表和多個用戶同時實時啟動數據。

做這個的最好方式是什么? 我是否應該簡單地刪除該表中的所有數據(數據塊有唯一的標識符)然后插入?

我認為可以做到:

  • 您可以創建臨時表並像開發服務器一樣填充,只需將表重命名為已發布表
  • 使用作業和后台服務(異步隊列)
  • 您可以將數據庫連接設置為單例,因為多次連接會浪費時間
  • 可以使用某些sql工具,例如,如果使用postgresql,則可以使用Foreign Data Wrapper(fdw)將數據庫彼此連接,並以更快的方式進行更新和創建!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM