laravel 口才ORM:工厂未重用已为多对多关系创建的模型

hujrc8aj  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在使用Laravel 9和Eloquent建模和播种以下模型:

  • 组织(1-n)
  • 组织_用户(透视)
  • 用户(1-n)

为了播种该模型,我遵循了文档并使用了has()recycle()方法。

database/seeders/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        // Organisations et users
        $organizations = Organization::factory()
            ->count(10)
            ->create();

        $users = User::factory()
            ->recycle($organizations)
            ->has(Organization::factory()->recycle($organizations)->count(1))
            ->count(10)
            ->create();
    }

当我使用->has(Organization::factory()->count(1))运行迁移时,我在数据库中获得了20个组织,而不是10个。
似乎没有为关系回收组织,而是为每个关系创建了一个新组织。
我做错了什么?在植入用户和组织后,我是否可以在单独的呼叫中植入关系?

njthzxwz

njthzxwz1#

您可以在UserFactory上使用afterCreating,手动创建随机关系。

数据库种子

public function run()
{
    Organization::factory()
        ->count(10)
        ->create();

    User::factory()
        ->count(10)
        ->create();
}

用户工厂

public function configure()
{
    return $this->afterCreating(function (User $user) {
        $user->organizations()->attach(Organization::all()->random(3));
    });
}

每个用户将随机拥有3个之前已创建的组织。

相关问题