Laravel 8 - 工厂和外键
Laravel 8 - Factories & Foreign Keys
在创建 Factories 和 Seeders 时,我无法找到如何管理外键。
我有一个users
table和一个blog_posts
table。 blog_posts
table 有一个引用 users.id
的外键 user_id
。我想在我的数据库中添加用户和博客 posts.
我已经了解了如何使用以下内容为每个种子博客 post 创建一个新用户:
/**
* Define the BlogPost model's default state.
*
* @return array
*/
public function definition()
{
return [
'user_id' => User::factory(),
'created_at' => now(),
'updated_at' => now(),
'title' => $this->faker->words(5, true),
'body' => $this->faker->paragraphs(6, true)
];
}
...但我想参考现有用户,因为我正在执行数据库种子,如下所示:
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class,
BlogPostsTableSeeder::class
]);
}
假设您的用户模型有一个名为 blogPosts
的 hasMany
关系,您可以执行以下操作:
User::factory()
->hasBlogPosts(6)
->create();
这将创建您的用户和 6 个关联的 BlogPosts。
我们可以检索一个随机存在的 User
并将其分配到 BlogPost
Factory
中,如下所示:
/**
* Define the BlogPost model's default state.
*
* @return array
*/
public function definition()
{
return [
'user_id' => User::inRandomOrder()->first()->id,
'created_at' => now(),
'updated_at' => now(),
'title' => $this->faker->words(5, true),
'body' => $this->faker->paragraphs(6, true)
];
}
在创建 Factories 和 Seeders 时,我无法找到如何管理外键。
我有一个users
table和一个blog_posts
table。 blog_posts
table 有一个引用 users.id
的外键 user_id
。我想在我的数据库中添加用户和博客 posts.
我已经了解了如何使用以下内容为每个种子博客 post 创建一个新用户:
/**
* Define the BlogPost model's default state.
*
* @return array
*/
public function definition()
{
return [
'user_id' => User::factory(),
'created_at' => now(),
'updated_at' => now(),
'title' => $this->faker->words(5, true),
'body' => $this->faker->paragraphs(6, true)
];
}
...但我想参考现有用户,因为我正在执行数据库种子,如下所示:
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class,
BlogPostsTableSeeder::class
]);
}
假设您的用户模型有一个名为 blogPosts
的 hasMany
关系,您可以执行以下操作:
User::factory()
->hasBlogPosts(6)
->create();
这将创建您的用户和 6 个关联的 BlogPosts。
我们可以检索一个随机存在的 User
并将其分配到 BlogPost
Factory
中,如下所示:
/**
* Define the BlogPost model's default state.
*
* @return array
*/
public function definition()
{
return [
'user_id' => User::inRandomOrder()->first()->id,
'created_at' => now(),
'updated_at' => now(),
'title' => $this->faker->words(5, true),
'body' => $this->faker->paragraphs(6, true)
];
}