Фабрика и сеялка для сводной таблицы - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь создать фабрику и сеялку для сводной таблицы. Я пытаюсь сделать это, не создавая модель только для сводной таблицы. Однако при этом я получаю ошибку. Прежде чем я покажу ошибку, вот мои файлы:

// 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()

Так что мне интересно, что я делаю неправильно и как я могу это исправить?

Спасибо.

1 Ответ

4 голосов
/ 30 марта 2020

Во-первых, вы можете создать модель для вашей сводной таблицы, поскольку класс модели (в вашем случае) вообще не существует. Во-вторых, вы можете прикрепить / синхронизировать c одну модель к другой вместо того, чтобы создавать сводную запись вручную. Наконец, вы можете использовать следующий код внутри factory(App\Category::class)

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