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),每个用户至少有一个帖子
以下是问题:
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)创建了一个新用户,