繁体   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