【问题标题】:Laravel generate multiple models using factory HasMany relationshipLaravel 使用工厂 HasMany 关系生成多个模型
【发布时间】:2020-11-01 20:27:02
【问题描述】:

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

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

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

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

但这不起作用。它创建用户,但不创建帖子。

我在播种机和修补程序中尝试过,结果相同。

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

【问题讨论】:

    标签: php factory laravel-8


    【解决方案1】:

    对于这个例子,我假设你有如下的帖子迁移

    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”,以防它不是

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

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 2017-03-21
      • 2018-06-13
      • 2015-12-09
      • 2022-11-22
      • 2015-03-12
      • 2018-01-10
      • 1970-01-01
      • 2015-10-21
      相关资源
      最近更新 更多