Laravel 使用外键从旧数据库中获取和复制数据到新数据库

问题描述

嗨,我想将表 A 中的数据从 DB A 迁移到 DB B 中的表 A。我构建了 laravel 函数获取数据库中的数据并将其复制到新数据库中。

在表 A 中 DB A

ID 代码名称代码产品

1 A01 ABC 001

2 A02 BCD 002

3 A03 DDD

在表 A DB B 中

ID 代码名称代码产品

两个表都与外键有关系,CodeProduct 为 FK 表 C。

我的问题是我在尝试获取 ID 时出错,因为 OLD DB 中的 CODEPRODUCT 为 NULL。如果不为 null 就没有错误

我尝试像下面的代码一样禁用和启用 FK

DB::statement('SET FOREIGN_KEY_CHECKS = 0;');

但得到错误 sql Server]'=' 附近的语法不正确。 (sql: SET FOREIGN_KEY_CHECKS=0;)

DB::statement('SET FOREIGN_KEY_CHECKS = 0;');

$datas = codeloanpackage::get();

DB::connection('sqlsrv2')
            ->table('CodeLoanPackages')
            ->insert([
                'Id' => $data->id,"Code" => $data->code,"Name" => $data->name,"CodeProduct" => $data->CodeProducts->Id]);
        }

    // Enable foreign key checks!
    DB::statement('SET FOREIGN_KEY_CHECKS=1;');

        

解决方法

您在 MSSQL 数据库上使用 MySQL 原始查询。

SET FOREIGN_KEY_CHECKS = 0;

SET FOREIGN_KEY_CHECKS = 1;

它在 MSSQL 上的等价物可能是:

Alter Table myTable
    NOCHECK Constraint All

Alter Table myTable
    CHECK Constraint ALL

编辑(更好的选择),使用 Eloquent

Schema::disableForeignKeyConstraints();

Schema::enableForeignKeyConstraints();