【问题标题】:Laravel 8 - Factories & Foreign KeysLaravel 8 - 工厂和外键
【发布时间】:2021-04-25 09:46:41
【问题描述】:

在创建工厂和播种机时,我无法找到如何管理外键。

我有一个users 表和一个blog_posts 表。 blog_posts 表有一个引用 users.id 的外键 user_id。我想在我的数据库中添加用户和博客文章。

我已经看到如何使用以下内容为每个种子博客帖子创建一个新用户:

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

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    假设您的 User 模型具有称为 blogPostshasMany 关系,您可以执行以下操作:

    User::factory()
        ->hasBlogPosts(6)
        ->create();
    

    这将创建您的用户和 6 个关联的博客帖子。

    【讨论】:

    • 这绝对是一个选项,但如果博客文章工厂创建了博客文章并只是查看用户工厂中存在哪些用户,那会更理想。
    • 在这种情况下,Stefano 的答案可能就是您所追求的。
    【解决方案2】:

    我们可以随机检索一个现有的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)
        ];
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-02
      • 2021-05-24
      • 2021-01-14
      • 1970-01-01
      • 2019-06-21
      • 2020-12-28
      • 2021-10-31
      • 2020-12-28
      相关资源
      最近更新 更多