Laravel 8 - 工厂和外键

Laravel 8 - Factories & Foreign Keys

在创建 Factories 和 Seeders 时,我无法找到如何管理外键。

我有一个userstable和一个blog_poststable。 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
    ]);
}

假设您的用户模型有一个名为 blogPostshasMany 关系,您可以执行以下操作:

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)
    ];
}