我有一个想要移植到 Laravel 的应用程序。
它已经有数据,所以我需要使用迁移和播种来移植和设置数据库数据。
在我的应用程序中,我有 Tablefoo
和 Table bar
。Table 中的字段是 Tablebar
中字段的外键foo
。
当我播种时,插入的 id 很可能与旧应用程序不同。
那么问题是外键字段的完整性会受到损害,因为 id 会不同。
有什么策略可以解决这个问题吗?我不介意更改外键字段的值,只要它指向正确的行。
不依赖于语言或框架、Laravel、Rails ......逻辑保持不变。
select
你必须在桌子上做一些聪明的事情bar
才能链接foo
到bar
.
因此,在Laravel上下文中,您打开FooTableSeeder.php
并编写如下内容:
$bar1 = Bar::where( ---your condition---)->first();
$bar2 = Bar::where( ---your condition---)->first();
DB::table('foo')->truncate();
$foogees = array(
array( 'bar_id' => $bar1->id ...),
array( 'bar_id' => $bar1->id ...),
array( 'bar_id' => $bar2->id ...),
...
);
DB::table('foo')->insert($foogees);
我也有类似的情况。我的解决方案是手动输入foo
id。它对我来说效果很好。
通常,我不建议为表设置主键,但由于您要移植它,我认为这是可以接受的情况之一。