Модель Seeding Faker Factory для отношений многие-ко-многим - PullRequest
0 голосов
/ 30 мая 2020

Я знаю, что это какая-то ошибка дампа, но какое-то время не могу ее найти. У меня есть таблица Meals и table Ingredient с отношением многие ко многим. Хотите ввести фальшивые данные и создать таблицу ингридиента. Я публикую код ниже, но когда я go для db: seed --class = MealSeeder, я получаю эту ошибку

SQLSTATE [HY000]: Общая ошибка: 1364 Поле 'title' не имеет значения по умолчанию (SQL: вставить в meals (updated_at, created_at) значения (2020-05-29 16:26:55, 2020-05-29 16:26:55))

предполагая, что эта фабрика работает неправильно, но нигде не может найти решения, я мог бы передать эту проблему, поместив nullable () в миграцию и обновив свои данные, но это мне не кажется правильным. Заранее благодарим за помощь!

MealFactory. php

    $factory->define(App\Meal::class, function (Faker $faker) {
    return [
        'title' => $faker->realText($maxNbChars = 10),
        'description' => $faker->realText($maxNbChars = 20),
    ];
});

   $factory->define(App\Ingredient::class, function (Faker $faker) {
        static $id = 1;
        return [
            'title' => $faker->realText($faker->numberBetween(10,15)),
            'slug' => $id++, //$faker->unique()->numberBetween(1,20),
        ];
    });

Model Meal. php

 protected $fillable = ['title','description'];

    public function ingredients()
    {
        return $this->belongsToMany('App\Ingredient');
    }

Model Ingredient. php

protected $fillable = ['title'];

public function meals()
{
    return $this->belongsToMany('App\Meal');
}

Перенос питания

Schema::create('meals', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('description');
            $table->string('status')->default('created');
            $table->string('category')->nullable();
            $table->timestamps();

            //$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        });

MealSeeder. php

factory(App\Meal::class, 10)->create()->each(function ($meals) {
    $meals->ingredients()->save(factory(App\Ingredient::class)->make());
});


factory(App\Ingredient::class, 10)->create()->each(function ($ingredients) {
    $ingredients->meals()->save(factory(App\Meal::class)->make());
});

// Get all the ingredients attaching up to 3 random ingredient to each meal
$ingredients = App\Ingredient::all();

// Populate the pivot table
App\Meal::all()->each(function ($meal) use ($ingredients) { 
    $meal->ingredients()->attach(
        $ingredients->random(rand(1, 3))->pluck('id')->toArray()
    ); 
});

РЕДАКТИРОВАТЬ: Я двинулся дальше, не нашел правильного решения. Я установил в миграции значение nullable () для атрибутов title и description. Запустите сидер и заполните все пустые данные через DB :: update. Теперь это выглядит так некрасиво: (

...