提问人:Payette1996 提问时间:8/19/2023 最后编辑:Karl HillPayette1996 更新时间:8/19/2023 访问量:35
PHP Laravel 播种 - 外 id
PHP Laravel seeding - foreign id
问:
下面的代码是我的数据库播种器中使用的工厂。问题在于,一些评论在帖子下,而另一些则在另一条评论下。也就是说,我需要找到一种方法来为帖子或评论生成foreign_id关系,而不是两者兼而有之。
此外,最大的挑战是,在某些情况下,评论需要与另一个评论有foreign_id关系。现在,使用下面的代码,NULL 将始终位于数据库列中comment_id...我猜它不承认该种子运行中新创建的记录......
class CommentFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'user_id' => User::inRandomOrder()->first(), // Gets a random user ID
'post_id' => Post::inRandomOrder()->first(),
'comment_id' => Comment::inRandomOrder()->first(), // !!! THIS LINE HERE !!!
'content' => fake()->paragraph(2)
];
}
}
我尝试在 if 语句中使用 rand(0, 1),该语句将在帖子或其他评论下创建评论。
问题是,当需要在另一个注释下创建注释时,comment_id的外部 ID 始终为 null,因为我的数据库在运行播种机时没有注释。
答:
0赞
Payette1996
8/19/2023
#1
答案如下: 我必须利用 configure() 方法和 afterCreating() 方法
class CommentFactory extends Factory
{
public function definition()
{
return [
'user_id' => User::inRandomOrder()->first()->id,
'content' => $this->faker->paragraph(2),
];
}
public function configure()
{
return $this->afterCreating(fn (Comment $comment) =>
rand(0, 1)
? $comment->update(['post_id' => Post::inRandomOrder()->first()->id])
: $comment->update(['comment_id' => Comment::inRandomOrder()->first()->id])
);
}
}
评论