在Laravel中如何使用Factory创建带随机数量关联评论的多篇文章
问题原因
你写的rand(1, 5)只会在构造工厂调用链时执行1次,生成的固定数值会被复用给所有20篇Post,所以所有文章的评论数都一致。
解决方案
方案1(兼容所有Laravel 8+版本)
使用afterCreating回调,每创建一篇Post就单独为它生成随机数量的关联评论:
Post::factory() ->times(20) ->afterCreating(function (Post $post) { Comment::factory()->times(rand(1, 5))->for($post)->create(); }) ->create();
方案2(Laravel 9+ 更简洁的写法)
直接给评论工厂的count()方法传入匿名函数,Laravel会在创建每篇Post时单独执行该函数生成随机数:
Post::factory() ->times(20) ->has(Comment::factory()->count(fn () => rand(1, 5))) ->create();
内容的提问来源于stack exchange,提问作者jose
相关产品推荐
相关产品推荐

