Laravel: не имеет значения по умолчанию - KeyProduct с Faker - PullRequest
0 голосов
/ 27 мая 2020

Я не могу добавить ключевой продукт при создании нового продукта. Я получаю сообщение об ошибке SQLSTATE[HY000]: General error: 1364 Field 'category_id' doesn't have a default value (SQL: insert into `products` (`activation_key`, `updated_at`, `created_at`) values (57394cd3-54f8-3e95-a951-e11f029fa0f5, 2020-05-27 17:09:08, 2020-05-27 17:09:08)) Я не знаю почему, меня спрашивают об этом.

Что я пробовал:

category_id - это мой первый столбец, который я Добавляю в мою таблицу. Если я поставлю ->nullable() на category_id, я получу ту же ошибку с именем, которое является следующим столбцом в моей таблице.

Это IMY-код:

ProductController

  public function store(Request $request)
    {

        $inputs = $request->except('_token');
        $quantity = $inputs['quantity'];
        factory(KeyProduct::class, $quantity)->create();

 foreach ($inputs as $key => $value) {
            $home->$key = $value;
        }

        $home->image=$path;
        $home->save();
        return redirect('admin/gamelist');
}

Product_table

 Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('category_id')->unsigned();
            $table->string('name');
            $table->string('image')->nullable();
            $table->string('activation_key')->nullable();
            $table->timestamps();
        });

KeyProduct_table. php

         Schema::create('key_products', function (Blueprint $table) {
           
             $table->increments('id');
             $table->string('activation_key');


             $table->timestamps();
         });

Keyproduct. php

 public function products()
    {
        return $this->HasOne('App\Product')->withPivot('quantity');
    }

Product. php

class Product extends Model
{
    public function categories()
    {
        return $this->belongsTo('App\Category', 'category_id');
    }
    
    public function keyProduct()
    {
        return $this->HasOne('App\KeyProduct');
    }

    protected $fillable = ['quantity'];
}

KeyProductFactory. php

use App\KeyProduct;
use App\Product;

$factory->define(KeyProduct::class, function (Faker $faker) {

    $product = factory(Product::class)->create();
    return [
            'activation_key' => $product->activation_key,
    
    ];
});

ProductFactory. php

use App\Product;
use Faker\Generator as Faker;

$factory->define(Product::class, function (Faker $faker) {
    return [
        'activation_key' => $faker->uuid
    ];
});

CategoryFactory

use App\Category;
use Faker\Generator as Faker;

$factory->define(Category::class, function (Faker $faker) {
    return [
        'activation_key' => $faker->uuid
    ];
});

Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

В вашем SQL вы указали значения только для столбцов «activate_key», «updated_at» и «created_at», поэтому другие поля должны удовлетворять хотя бы одному утверждению:

  1. иметь параметр AUTO_INCREMENT;
  2. имеют значение ПО УМОЛЧАНИЮ;
  3. разрешает значения NULL.

Вы не предоставили достаточно данных для выполнения запроса.

0 голосов
/ 27 мая 2020

Добавьте больше $fillable s к вашей Product.php модели. Глядя на ваши миграции, он должен выглядеть так:

protected $fillable = [
    'category_id', 'name', 'image', 'activation_key', 'quantity'
];
0 голосов
/ 27 мая 2020

Это не удается, потому что продукт создается без указания этого category_id или имени во время создания. Сделайте их допускающими значение NULL () или измените свой метод создания соответствующим образом.

...