Laravel 拉维尔工厂问题

Laravel 拉维尔工厂问题,laravel,Laravel,有人能告诉我这个工厂电话有什么问题吗 factory('App\User', 9)->create()->each(function ($user){ $user->posts()->save(factory('App\Post')->make()); }); 正如你们所看到的,我想创建9个用户(因为第10个用户将是我在seeds中创建的acc),每个用户至少有一个帖子 以下是问题: 如果我运行这些代码行,它将使我有19个用户和9个帖子。。。

有人能告诉我这个工厂电话有什么问题吗

factory('App\User', 9)->create()->each(function ($user){
       $user->posts()->save(factory('App\Post')->make());
    });
正如你们所看到的,我想创建9个用户(因为第10个用户将是我在seeds中创建的acc),每个用户至少有一个帖子

以下是问题:

  • 如果我运行这些代码行,它将使我有19个用户和9个帖子。。。

  • 第二个问题是,如果我运行完全相同的代码行,只需添加我希望每个用户拥有的帖子数量,例如:

    工厂('App\User',9)->create()->每个(函数($User){ $user->posts()->save(工厂('App\Post',rand(1,5)->make()); }))

  • 因此,每个用户都可以随机获得一些附加到他身上的帖子。运行此代码后,我发现了这个问题

    编辑->其他相关文件

    来自DatabaseSeeder.php的完整代码

    public function run()
    {
         $this->call(UserSeeder::class);
    
        factory('App\User', 9)->create()->each(function ($user){
           $user->posts()->saveMany(factory('App\Post', rand(1, 5))->make());
        });
    }
    
    UserSeeder.php代码

    public function run()
    {
        User::create([
            'name' => 'Sead Silajdzic',
            'username' => 'sead',
            'email' => 'sead@hotmail.com',
            'password' => bcrypt('password'),
            'slug' => Str::slug('Sead Silajdzic')
        ]);
    }
    
    App\User仅与帖子相关

    public function posts(){
        return $this->hasMany(Post::class);
    }
    
    用户工厂

    $factory->define(User::class, function (Faker $faker) {
    
    $name = $faker->name;
    $slug = Str::slug($name);
    
    return [
        'name' => $name,
        'slug' => $slug,
        'username' => $faker->userName,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
    
    $factory->define(Post::class, function (Faker $faker) {
    
    $title = $faker->sentence;
    $slug = Str::slug($title);
    
    return [
        'title' => $title,
        'slug' => $slug,
        'content' => $faker->paragraph,
        'featured' => $faker->imageUrl('900', '480'),
        'user_id' => factory(User::class),
        'category_id' => 1
    ];
    
    }))

    出厂后

    $factory->define(User::class, function (Faker $faker) {
    
    $name = $faker->name;
    $slug = Str::slug($name);
    
    return [
        'name' => $name,
        'slug' => $slug,
        'username' => $faker->userName,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
    
    $factory->define(Post::class, function (Faker $faker) {
    
    $title = $faker->sentence;
    $slug = Str::slug($title);
    
    return [
        'title' => $title,
        'slug' => $slug,
        'content' => $faker->paragraph,
        'featured' => $faker->imageUrl('900', '480'),
        'user_id' => factory(User::class),
        'category_id' => 1
    ];
    
    }))


    这就是我的全部猜测:)

    您描述的最后一个问题,即每个用户保存多个帖子,是因为您试图使用
    save
    方法保存多个项目。相反,当您有一个数组或集合时,应该使用该方法

    factory('App\User', 9)->create()->each(function ($user){
       $user->posts()->saveMany(factory('App\Post', rand(1, 5))->make());
    });
    
    根据从评论中收集的新信息,您很可能正在为您在Post factory中创建的每个帖子创建一个新用户

    更新:您正在Post factory中使用此行创建新用户:

    'user_id' => factory(User::class),
    

    可能是因为在Post factory中,你正在创建一个用户,你提到第10个是用种子制作的其他东西。。。我真的不知道你说的是什么意思,但9+10=19;你确定你没有在其他地方创建10个用户吗?另一个10+9推测的可能性是,你显示的小部件使用的是用户表中的最高ID,而不是用户数量,而“我的acc在种子中创建”意味着你创建了一个ID为10的帐户,因此你创建的9个新帐户具有ID 11、12、。。。, 19@RobinDeSchepper我的帐户中有seeder,它应该是第10个acc,我正在尝试使用factory生成9个:)这是10个用户,但应该超过10个帖子,因为所有用户都应该有1到5个随机帖子。所以Berto99建议:9个用户有9个帖子(然后再生成9个用户)+1用户=18+1用户=19用户在
    rand
    之后可能缺少一个
    现在我有34个用户和24个帖子,而不是10个用户和一些帖子。在这种情况下,最有可能的情况是,在你的帖子工厂中,你每个帖子都创建了另一个用户?@RobinDeSchepper我将用所有相关文件编辑我的问题,几分钟后查看mins:)@SeadSilajdzic更新了我的答案,您在Post factory中使用
    'User\u id'=>工厂(User::class)创建了一个新用户,