我有一个应用程序,我想移植到Laravel。
它已有数据,因此我需要使用Migration and Seeding移植和设置数据库数据。
在我的应用中,我有表foo
和表bar
。表bar
中的字段是表foo
中字段的外键。
当我播种时,插入的id很可能与旧应用程序不同。
问题是外键字段的完整性会受到影响,因为ID会不同。
有什么策略可以解决这个问题吗?我不介意更改外键字段的值,只要它指向正确的行。
答案 0 :(得分:0)
我不确定您为什么要为应用程序设置数据种子,通常迁移完全用于架构更改,因此您可以使用应用程序的新版本滚动这些更改,同时将其播种主要用于部署测试数据到您的数据库,以便您可以对它们运行单元测试。
当然,您应该只是在迁移中重新创建模式,然后将已有的数据导入新数据库?只要您以正确的顺序运行导入,您就不必担心索引,因为它们不需要更改
答案 1 :(得分:0)
我有类似的情况。我的解决方案是手动输入foo
ID。它对我有用。
通常情况下,我不建议为表格设置主键,但由于您正在移植它,我认为这是可以接受的情况之一。
答案 2 :(得分:0)
不依赖于语言或框架,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);