Laravel - 具有外键的表的播种策略

时间:2013-10-15 01:54:23

标签: laravel seeding

我有一个应用程序,我想移植到Laravel。

它已有数据,因此我需要使用Migration and Seeding移植和设置数据库数据。

在我的应用中,我有表foo和表bar。表bar中的字段是表foo中字段的外键。

当我播种时,插入的id很可能与旧应用程序不同。

问题是外键字段的完整性会受到影响,因为ID会不同。

有什么策略可以解决这个问题吗?我不介意更改外键字段的值,只要它指向正确的行。

3 个答案:

答案 0 :(得分:0)

我不确定您为什么要为应用程序设置数据种子,通常迁移完全用于架构更改,因此您可以使用应用程序的新版本滚动这些更改,同时将其播种主要用于部署测试数据到您的数据库,以便您可以对它们运行单元测试。

当然,您应该只是在迁移中重新创建模式,然后将已有的数据导入新数据库?只要您以正确的顺序运行导入,您就不必担心索引,因为它们不需要更改

答案 1 :(得分:0)

我有类似的情况。我的解决方案是手动输入foo ID。它对我有用。

通常情况下,我不建议为表格设置主键,但由于您正在移植它,我认为这是可以接受的情况之一。

答案 2 :(得分:0)

不依赖于语言或框架,Laravel,Rails ......逻辑保持不变。

您必须在select表格上执行一些智能bar才能将foobar相关联。

所以在 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);