【发布时间】:2017-09-23 00:35:28
【问题描述】:
我正在尝试使用 faker 为我的数据库播种,但我遇到了一些与外来元素有关的问题。我只有一个用户,但我不知道它的 ID。我希望所有帖子都有它的 ID。
我就是这样做的:
public function run()
{
factory(App\User::class)->create();
factory(App\Category::class, 3)->create();
$user = \App\User::first();
factory(App\Post::class, 10)->create(['author_id' => $user->id]);
}
这是我的后期工厂:
$factory->define(App\Post::class, function (Faker\Generator $faker) {
return [
'title' => $faker->unique()->sentence(5),
'subtitle' => $faker->optional()->sentence(10),
'markdown' => $faker->text(500),
'draft' => $faker->boolean(),
'category_id' => $faker->numberBetween(1, 6),
];
});
在db:seed 之后,这是我得到的错误(用户和类别填充得很好):
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`laman`.`posts`, CO
NSTRAINT `posts_author_id_foreign` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`)) (SQL: insert into `posts` (`title`, `slug`, `subtit
le`, `markdown`, `draft`, `category_id`, `author_id`, `html`, `published_at`, `updated_at`, `created_at`) values (title.,
slug, , markdown, 0, 6, 1, html, 2017-04-25 20:08:34, 2017-04-25 20:08:34, 2017-04-25
20:08:34))
这里的用户id是1或者应该是9。为什么?
【问题讨论】:
-
看起来这每次都会创建一个新用户,但您正在调用表中的第一个用户。是这种情况,还是您刷新迁移?
-
我删除了用户和类别 un phpmyadmin。有没有更好的方法来截断具有关系的表?
-
使用
php artisan migrate:refresh --seed将完全回滚和迁移您的数据库以及填充种子文件。只要您在数据库中没有有价值的数据,这很好。使用迁移来管理数据库通常是一种很好的做法,尽管我发现自己每隔一段时间就会手动删除一次。
标签: php laravel laravel-5 faker