【发布时间】:2018-12-11 19:15:19
【问题描述】:
我正在尝试填充我的数据库并有一个父表status 和一个子表server_statuses。这是一对多的关系。
我遇到的问题是状态表只有 3 个值,需要将它们设置为特定值 (success, warning, danger)。 Larvaels 文档并没有深入探讨如何实现这一点。
我也不确定播种是否是我收到错误的原因,发布在下面。如果这不是我想的播种,我可以在 PHPmyAdmin 中手动输入 3 个值,然后运行我的 DB 播种器。我还将发布我的迁移以及播种器文件。
对此错误的解决方案有什么想法吗?
运行播种机时的当前错误:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constrai
ENCES `statuses` (`id`)) (SQL: insert into `server_statuses` (`server_id`, `status_id`, `updated_at`, `created_at`) values (20, 4, 2018-07-03 12:21:05,
迁移:
Schema::create('statuses', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('key');
$table->string('status');
$table->timestamps();
});
Schema::create('server_statuses', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('server_id')->unsigned();
$table->foreign('server_id')->references('id')->on('servers')->onDelete('cascade');
$table->integer('status_id')->unsigned();
$table->foreign('status_id')->references('id')->on('statuses');
$table->timestamps();
});
播种机工厂(删除了我为 Status 尝试的内容,因为这是一个糟糕的解决方案尝试):
$factory->define(Status::class, function (Faker $faker) {
return [
'key' => ,
'status' =>
];
});
$factory->define(ServerStatus::class, function (Faker $faker) {
return [
'server_id' => $faker->numberBetween($min = 1, $max = 20),
'status_id' => $faker->numberBetween($min = 1, $max = 3)
];
});
【问题讨论】:
-
此错误是因为您将带有
status_id的条目插入到server_statuses中,而status表中不存在该条目。 -
但我不能这样做,因为它是在状态上引用
id的外键? -
先在
status中创建id 1到3的条目,然后运行命令在server_statuses中插入数据。 -
这就是我一直在做的就是去 PHPmyAdmin 并添加 3 个值然后运行我的数据库种子。我想这就是问题所在,我怎样才能让我的播种机播种这 3 个值,这样我就不再需要这样做了?
-
你使用的是哪个版本的 laravel?
标签: php mysql database laravel laravel-seeding