Laravel 6:db:用户中的多个种子种子

问题描述 投票:0回答:1

我有以下工厂和播种机。

工厂

  • UserFactory.php
  • ThreadFactory.php
  • ReplyFactory.php

播种者

  • UsersTableSeeder.php
  • ThreadTableSeeder.php
  • RepliesTableSeeder.php

UserFactory.php


    $factory->define(App\User::class, function (Faker $faker) {
        return [
            'name' => $faker->name,
            'email' => $faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    });

ThreadFactory.php


    $factory->define(App\Thread::class, function (Faker $faker) {
        return [
            'user_id' => function() {
                return factory(App\User::class)->create()->id;
            },
            'title' => $faker->sentence,
            'body'  => $faker->paragraph
        ];
    });

ReplyFactory.php


    $factory->define(App\Reply::class, function (Faker $faker) {
        return [

            'user_id' => function() {
                return factory(App\User::class)->create()->id;
            },

            'thread_id' => function() {
                return factory(App\Thread::class)->create()->id;
            },

            'body' => $faker->paragraph
        ];
    });

UsersTableSeeder.php
```php

    public function run()
        {
            factory(App\User::class, 50)->create();
        }

ThreadTableSeeder.php


    public function run()
        {
            factory(App\Thread::class, 50)->create()->each(function ($thread) {
                factory(App\Reply::class, 10)->create(['thread_id' => $thread->id]);
            });
        }

RepliesTableSeeder.php


    public function run()
        {
         // nothing in here . . .   
        }

DatabaseSeeder.php


    public function run()
        {
            $this->call(ThreadTableSeeder::class);
        }

我的问题是运行以下命令时,用户表中有550个用户行,但其他两个表正确。

php artisan db:seed

那么,这是怎么回事?我正在使用Laravel 6.4.1。

database laravel factory seed
1个回答
0
投票

根据您的每个线程的代码,正在创建一个用户。对于每个答复,将创建一个用户。因此,对于50个线程和每个线程10个回复,应该创建大约50x10=500个用户。同样在您的用户播种器类中,您将创建50个用户,自然可以得出550个用户。

现在,如果您想保持用户数量少,而不是为每个线程/回复创建一个新用户,则可以从数据库中随机获取用户并进行分配。这是一个例子

    $factory->define(App\Thread::class, function (Faker $faker) {
        return [
            'user_id' => \App\User::all()->random()->id,
            'title' => $faker->sentence,
            'body'  => $faker->paragraph
        ];
    });

要使其正常工作,您必须首先为用户表添加所需数量的用户种子。

© www.soinside.com 2019 - 2024. All rights reserved.