我试图填充我的数据库,并有一个家长 status
table和孩子 server_statuses
table。这是一对多的关系。
我遇到的问题是statuses表只有3个值,需要将它们设置为特定的值( success, warning, danger
). 对于如何实现这一点,Els文档并没有深入讨论。
我也不知道如果种子是我得到错误的原因,张贴在下面。如果不是种子,我想我可以手动输入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();
});
播种机工厂(删除了我所尝试的状态,因为这是一个可怕的解决方案):
$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)
];
});
1条答案
按热度按时间z9zf31ra1#
此错误是因为您正在将条目插入
server_statuses
与status_id
不存在于status
table。首先在status
id为1到3,然后运行命令在中插入数据server_statuses
.根据你最后的评论。从数组中播种数据库的方法。
创建播种器类:
并在默认情况下添加其条目
DatabaseSeeder.php
```public function run()
{
$this->call(StatusSeeder::class);
}