【问题标题】:Eloquent ORM: Factory not reusing the already created model for a many-to-many relationEloquent ORM:工厂不为多对多关系重用已创建的模型
【发布时间】:2023-02-12 00:25:15
【问题描述】:

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

  • 组织(1-n)
  • organizations_users(枢轴)
  • 用户 (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 个。

似乎 Organizations 没有为关系回收,并且为每个关系创建了一个新的 Organization 。

我究竟做错了什么?在播种用户和组织之后,我是否能够在单独的电话中播种关系?

【问题讨论】:

  • 你设法弄明白了吗?我陷入了类似的境地。链接这些请求似乎失败了。
  • 我最终创建了没有工厂但直接使用 Faker 和循环的模型。它不像文档中的那样,但它解决了问题

标签: laravel eloquent eloquent-relationship


【解决方案1】:

您可以在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 个之前创建的组织。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 2015-10-29
    • 2021-11-26
    • 2013-04-06
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多