问题描述
嗨,我想将表 A 中的数据从 DB A 迁移到 DB B 中的表 A。我构建了 laravel 函数来获取旧数据库中的数据并将其复制到新数据库中。
在表 A 中 DB A
1 A01 ABC 001
2 A02 BCD 002
3 A03 DDD
在表 A DB B 中
两个表都与外键有关系,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();