首页 > 解决方案 > 数据透视表的工厂和播种机

问题描述

我正在尝试为数据透视表创建工厂和播种机。我正在尝试这样做,而不是仅为数据透视表创建模型。但是,在这样做时,我遇到了一个错误。在我显示错误之前,这是我的文件:

// CategoryNewsFactory.php
use App\Model;
use Faker\Generator as Faker;

$factory->define(Model::class, function (Faker $faker) {
    DB::table('category_news')->insert(
      [
          'category_id' => factory(App\Category::class)->create()->id,
          'news_id' => factory(App\News::class)->create()->id,
      ]
  );
});
// CategoriesNewsSeeder.php

    public function run()
    {
        factory(App\Model::class, 35)->create();
    }

这是我的错误信息:

   Error

  Class 'App\Model' not found

  at C:\laragon\www\startup-reporter\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:232
    228|         if ($this->amount < 1) {
    229|             return (new $this->class)->newCollection();
    230|         }
    231|
  > 232|         $instances = (new $this->class)->newCollection(array_map(function () use ($attributes) {
    233|             return $this->makeInstance($attributes);
    234|         }, range(1, $this->amount)));
    235|
    236|         $this->callAfterMaking($instances);

  1   C:\laragon\www\startup-reporter\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:169
      Illuminate\Database\Eloquent\FactoryBuilder::make([])

  2   C:\laragon\www\startup-reporter\database\seeds\CategoriesNewsTableSeeder.php:14
      Illuminate\Database\Eloquent\FactoryBuilder::create()

所以我想知道,我做错了什么,我该如何解决?

谢谢。

标签: laravellaravel-6

解决方案


首先,您可以为数据透视表创建模型,只要模型类(在您的情况下)根本不存在。其次,您可以将一个模型附加/同步到另一个模型,而不是手动创建数据透视记录。最后可以在里面使用如下代码 factory(App\Category::class)

$factory->afterCreating(Category::class, function (Category $category, $faker) {
    $category->news()->save(factory(News::class)->make());
});

推荐阅读