gpt4 book ai didi

php - Laravel 使用工厂 HasMany 关系生成多个模型

转载 作者:行者123 更新时间:2023-12-05 03:47:59 25 4
gpt4 key购买 nike

在 Laravel 8 中,我们可以创建一个具有多个 post(hasMany 关系)的user,如下所示:

User::factory()
->has(Post::factory()->count(3))
->create();

但我想创建 3 用户,每个用户有 3 个帖子。我尝试了以下 [added times(3)]:

User::factory()
->has(Post::factory()->count(3))
->times(3)
->create();

但这行不通。它创建用户,但不创建帖子。

我在 seeder 和 tinker 中尝试了这个,结果相同。

我知道我可以循环执行,但是没有一种流畅的方法吗? 💡

最佳答案

对于这个例子,我假设你有一个像下面这样的帖子迁移

class CreatePostsTable extends Migration {

public function up() {
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId("user_id")->references("id")->on("users")->onDelete("cascade");
$table->string("name");
$table->timestamps();
});
}

public function down() {
Schema::dropIfExists('posts');
}
}

像这样的 PostsFactory.php

class PostFactory extends Factory {

protected $model = Post::class;

public function definition() {

return [
"name" => $this->faker->words($nb = 3, $asText = true)
];
}
}

最后是像这样的 User.php 模型

  class User extends Authenticatable {
use HasFactory, Notifiable;

public function posts() {

return $this->hasMany('App\Models\Post');

}

}

也就是说你可以在你的 DatabaseSeeder.php 中做这样的事情

User::factory()->times(3)->hasPosts(3)->create();

然后你可以简单地使用:“php artisan migrate --seed” 如果你的数据库是空的或“php artisan migrate:refresh --seed”以防万一

请记住,此操作后所有记录都将永久丢失,播种器将创建新记录

关于php - Laravel 使用工厂 HasMany 关系生成多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64636625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com