在laravel中,如何将A数据库的表A复制到B数据库的表B

先上代码

do {
            try {
                $result = $this->loadGskydjxx($this->task['dsid'], $page, $pageSize);
            } catch (\Exception $e) {
                // 结束导入
                $this->info(sprintf('sync %s finished. totalRows:%d', $this->task['src'], $totalRows));
                $this->statusSave($table, $totalRows, true);
                exit;
            }

            $pageData = json_decode($result['PAGE_DATA'], true);
            $data = json_decode($result['DATA'], true);
            $pageCount = $pageData['PAGE_COUNT'];

            $start = ($page - 1) * $pageSize + 1;
            $this->info(sprintf('sync %s insert %d -> %d', $this->task['src'], $start, $start + $pageSize));

            $table->notice = sprintf('开始导入第%s条到%s条', $start, $start + $pageSize);
            $table->save();

            foreach ($data as $row) {
                DB::insert(sprintf("insert into %s (`activecapcointype`, `activecapexrate`, `activecapital`, `address`, `addressproperty`, `addressregionalism`, `adminpersonnum`, `adregistertype`, `aicid`, `aicstationid`, `annualdeptid`, `approvaldocumentno`, `approvedate`, `approvedon`, `backupdate`, `bankaccount`, `bankname`, `begindate`, `bizscopeparentid`, `bizsequence`, `businessmode`, `businessscope`, `certificatename`, `changefromgthregno`, `chargedep`, `checkgrade`, `checkhistoryinfoid`, `checkyear`, `coinid`, `comments`, `copydate`, `copynum`, `corpkeywords`, `corpname`, `corporgcode`, `corpregdep`, `coworkerandapprentice`, `deptopinion`, `deputyname`, `deputyphone`, `dominationcode`, `durationstay`, `economicproperty`, `email`, `employeenum`, `enddate`, `enterprisestatusid`, `entityidcode`, `entityno`, `entitytypeid`, `exchangerate`, `executantnum`, `expeditecorpname`, `expeditecorpregcode`, `expeditecorpregterra`, `familyempolyeenumber`, `familysign`, `faxno`, `feebankaccountid`, `feestardandid`, `feetype`, `fileid`, `fixedcapcointype`, `fixedcapexrate`, `fixedcapital`, `foodstufflabel`, `foreigncertname`, `foreigncertno`, `foreignentitytype`, `foreignindustrial`, `foreignname`, `foundingcopydate`, `foundingdate`, `historyinfoid`, `individualmakeupmodeid`, `industrycode`, `industrytype`, `investamount`, `investcointype`, `investexchangerate`, `investor`, `investtype`, `isassetmerger`, `isbroker`, `ischangeentitytype`, `ischangefromgth`, `ischecklicence`, `isinvestcompany`, `isruralbroker`, `issecrecy`, `isselectlicencevmonth`, `isselectyear`, `isstockmerger`, `issuedeptid`, `istemplicense`, `istemporary`, `isurban`, `keywordsspell`, `lastcheckdate`, `lastpaymentdate`, `launchprivatenum`, `liaisonname`, `liaisontelphone`, `licencevaildenddate`, `licencevaildmonth`, `licencevaildstartdate`, `locus`, `mainfoodstufflabel`, `mainproducts`, `monthterm`, `nameinputstyle`, `namereghistoryinfoid`, `nameseg1`, `nameseg3`, `nameseg4`, `noticeletterno`, `operationarea`, `operbegindate`, `operenddate`, `operyear`, `orgunitid`, `otherbizscopeparentid`, `otherbusinessscope`, `otherpersonnum`, `paiclupcapital`, `paiclupcptlcoin`, `paiclupcptlexrate`, `partnernum`, `perilindustry`, `permissionproject`, `phone`, `placeproperty`, `placeusingtodate`, `postcode`, `principal`, `principalphone`, `ratedmgmtfee`, `rawmaterialfrom`, `recorddate`, `regcapital`, `regcapitalchina`, `regcapitalcoin`, `regcapitaldollor`, `regcapitaloversea`, `regcptlcncoin`, `regcptlcncoinexerate`, `regcptlovsecoin`, `regcptlovsecoinexerate`, `registerno`, `regplace`, `relation`, `runninglocation`, `sealcount`, `secondname`, `shortname`, `simpleentitytype`, `singlebizplaceid`, `singleentitytype`, `specialindustrytype`, `sponsoresby`, `sponsoresphone`, `status`, `statutebackup`, `subentitytype`, `superiorityprodcode`, `supervisedeptid`, `technicpersonnum`, `technitiannum`, `toolandmachine`, `totalinvest`, `totalmonthterm`, `transfernoticeno`, `unemployment`, `unittype`, `upcorplegalrep`, `validstay`, `validstaystart`, `viceprincipal`, `viceprincipalphone`, `workplace`, `workprivatenum`, `uniscid`) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                    $this->task['dst']), [
                    $row['ACTIVECAPCOINTYPE'], $row['ACTIVECAPEXRATE'], $row['ACTIVECAPITAL'], $row['ADDRESS'],
                    $row['ADDRESSPROPERTY'], $row['ADDRESSREGIONALISM'], $row['ADMINPERSONNUM'], $row['ADREGISTERTYPE'],
                    $row['AICID'], $row['AICSTATIONID'], $row['ANNUALDEPTID'], $row['APPROVALDOCUMENTNO'],
                    $row['APPROVEDATE'], $row['APPROVEDON'], $row['BACKUPDATE'], $row['BANKACCOUNT'], $row['BANKNAME'],
                    $row['BEGINDATE'], $row['BIZSCOPEPARENTID'], $row['BIZSEQUENCE'], $row['BUSINESSMODE'],
                    $row['BUSINESSSCOPE'], $row['CERTIFICATENAME'], $row['CHANGEFROMGTHREGNO'], $row['CHARGEDEP'],
                    $row['CHECKGRADE'], $row['CHECKHISTORYINFOID'], $row['CHECKYEAR'], $row['COINID'], $row['COMMENTS'],
                    $row['COPYDATE'], $row['COPYNUM'], $row['CORPKEYWORDS'], $row['CORPNAME'], $row['CORPORGCODE'],
                    $row['CORPREGDEP'], $row['COWORKERANDAPPRENTICE'], $row['DEPTOPINION'], $row['DEPUTYNAME'],
                    $row['DEPUTYPHONE'], $row['DOMINATIONCODE'], $row['DURATIONSTAY'], $row['ECONOMICPROPERTY'],
                    $row['EMAIL'], $row['EMPLOYEENUM'], $row['ENDDATE'], $row['ENTERPRISESTATUSID'],
                    $row['ENTITYIDCODE'], $row['ENTITYNO'], $row['ENTITYTYPEID'], $row['EXCHANGERATE'],
                    $row['EXECUTANTNUM'], $row['EXPEDITECORPNAME'], $row['EXPEDITECORPREGCODE'],
                    $row['EXPEDITECORPREGTERRA'], $row['FAMILYEMPOLYEENUMBER'], $row['FAMILYSIGN'], $row['FAXNO'],
                    $row['FEEBANKACCOUNTID'], $row['FEESTARDANDID'], $row['FEETYPE'], $row['FILEID'],
                    $row['FIXEDCAPCOINTYPE'], $row['FIXEDCAPEXRATE'], $row['FIXEDCAPITAL'], $row['FOODSTUFFLABEL'],
                    $row['FOREIGNCERTNAME'], $row['FOREIGNCERTNO'], $row['FOREIGNENTITYTYPE'],
                    $row['FOREIGNINDUSTRIAL'], $row['FOREIGNNAME'], $row['FOUNDINGCOPYDATE'], $row['FOUNDINGDATE'],
                    $row['HISTORYINFOID'], $row['INDIVIDUALMAKEUPMODEID'], $row['INDUSTRYCODE'], $row['INDUSTRYTYPE'],
                    $row['INVESTAMOUNT'], $row['INVESTCOINTYPE'], $row['INVESTEXCHANGERATE'], $row['INVESTOR'],
                    $row['INVESTTYPE'], $row['ISASSETMERGER'], $row['ISBROKER'], $row['ISCHANGEENTITYTYPE'],
                    $row['ISCHANGEFROMGTH'], $row['ISCHECKLICENCE'], $row['ISINVESTCOMPANY'], $row['ISRURALBROKER'],
                    $row['ISSECRECY'], $row['ISSELECTLICENCEVMONTH'], $row['ISSELECTYEAR'], $row['ISSTOCKMERGER'],
                    $row['ISSUEDEPTID'], $row['ISTEMPLICENSE'], $row['ISTEMPORARY'], $row['ISURBAN'],
                    $row['KEYWORDSSPELL'], $row['LASTCHECKDATE'], $row['LASTPAYMENTDATE'], $row['LAUNCHPRIVATENUM'],
                    $row['LIAISONNAME'], $row['LIAISONTELPHONE'], $row['LICENCEVAILDENDDATE'],
                    $row['LICENCEVAILDMONTH'], $row['LICENCEVAILDSTARTDATE'], $row['LOCUS'], $row['MAINFOODSTUFFLABEL'],
                    $row['MAINPRODUCTS'], $row['MONTHTERM'], $row['NAMEINPUTSTYLE'], $row['NAMEREGHISTORYINFOID'],
                    $row['NAMESEG1'], $row['NAMESEG3'], $row['NAMESEG4'], $row['NOTICELETTERNO'], $row['OPERATIONAREA'],
                    $row['OPERBEGINDATE'], $row['OPERENDDATE'], $row['OPERYEAR'], $row['ORGUNITID'],
                    $row['OTHERBIZSCOPEPARENTID'], $row['OTHERBUSINESSSCOPE'], $row['OTHERPERSONNUM'],
                    $row['PAICLUPCAPITAL'], $row['PAICLUPCPTLCOIN'], $row['PAICLUPCPTLEXRATE'], $row['PARTNERNUM'],
                    $row['PERILINDUSTRY'], $row['PERMISSIONPROJECT'], $row['PHONE'], $row['PLACEPROPERTY'],
                    $row['PLACEUSINGTODATE'], $row['POSTCODE'], $row['PRINCIPAL'], $row['PRINCIPALPHONE'],
                    $row['RATEDMGMTFEE'], $row['RAWMATERIALFROM'], $row['RECORDDATE'], $row['REGCAPITAL'],
                    $row['REGCAPITALCHINA'], $row['REGCAPITALCOIN'], $row['REGCAPITALDOLLOR'],
                    $row['REGCAPITALOVERSEA'], $row['REGCPTLCNCOIN'], $row['REGCPTLCNCOINEXERATE'],
                    $row['REGCPTLOVSECOIN'], $row['REGCPTLOVSECOINEXERATE'], $row['REGISTERNO'], $row['REGPLACE'],
                    $row['RELATION'], $row['RUNNINGLOCATION'], $row['SEALCOUNT'], $row['SECONDNAME'], $row['SHORTNAME'],
                    $row['SIMPLEENTITYTYPE'], $row['SINGLEBIZPLACEID'], $row['SINGLEENTITYTYPE'],
                    $row['SPECIALINDUSTRYTYPE'], $row['SPONSORESBY'], $row['SPONSORESPHONE'], $row['STATUS'],
                    $row['STATUTEBACKUP'], $row['SUBENTITYTYPE'], $row['SUPERIORITYPRODCODE'], $row['SUPERVISEDEPTID'],
                    $row['TECHNICPERSONNUM'], $row['TECHNITIANNUM'], $row['TOOLANDMACHINE'], $row['TOTALINVEST'],
                    $row['TOTALMONTHTERM'], $row['TRANSFERNOTICENO'], $row['UNEMPLOYMENT'], $row['UNITTYPE'],
                    $row['UPCORPLEGALREP'], $row['VALIDSTAY'], $row['VALIDSTAYSTART'], $row['VICEPRINCIPAL'],
                    $row['VICEPRINCIPALPHONE'], $row['WORKPLACE'], $row['WORKPRIVATENUM'], $row['UNISCID']
                ]);
                $totalRows++;
            }

            $page++;
        } while ($pageCount >= $page);

        // 结束导入
        $this->info(sprintf('sync %s finished. totalRows:%d', $this->task['src'], $totalRows));
        $this->statusSave($table, $totalRows);

今天一个老哥来找我帮他修改一下代码,真是活久见,看到上面的代码,人都是傻了,整体看了下他的大概功能是:
【将A数据库的表A 复制到B数据库的表B】
这是以前一个哥们写的代码,超级好奇他是怎么把这么多的字段全部抄下来的
他这么做的目的只是为了凑出一条条sql语句出来,然后连接另外一个数据,在不断的循环插入到B数据库中,如果是你,你会怎么办?

说说我的想法吧

方案1

如果是由于各种原因,需要将老的表重新切换到新的表中,新旧表字段可能无法对应起来情况下:
a:将旧表直接修改表结构为新表的结构,新表替换旧表。

方案2

如何旧表依然需要,但是旧表产生的数据需要同步到新表
a:当curd数据的时候,异步创建一个队列自动同步到新表中,这样就可以避免写大量的for循环。

你们有什么好的方案呢?

本作品采用《CC 协议》,转载必须注明作者和本文链接
保持勇敢,坚持有趣,生命不息,折腾不止。
OrangBus
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

直接SQL操作

1年前 评论

直接导出再导入不就好了?

1年前 评论
OrangBus (楼主) 1年前

在A库项目database文件里配置好B库,然后写observer(增删改)

1年前 评论
OrangBus (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!