У меня фабрика такая:

$factory->define(App\Product::class, function (Faker $faker) {
    return [
        'product_name' => $faker->sentence($nbWords = 4, $variableNbWords = true),
        'product_description' => $faker->paragraph($nbSentences = 6, $variableNbSentences = true),
        'product_price' => $faker->numberBetween($min=500, $max=2000),
    ];
});

И следующая миграция:

public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->increments('product_id');
            $table->string('product_name', 356)->nullable(false);
            $table->longText('product_description')->nullable();
            $table->integer('product_price')->nullable(false);
            $table->timestamps();
        });
    }

После запуска фабрики и распечатки вновь созданного продукта он говорит, что PK - это id, а не product_id. При попытке доступа к $ product-> product_id возвращается null, потому что, очевидно, этого не существует в соответствии с фабрикой.

Проверяя таблицу БД, я могу подтвердить, что столбец называется product_id, а не id.

Я уже бегал:

composer dump-autoload

А затем снова запустил миграцию, но все равно получил неправильные данные.

Спасибо

1
MrCujo 13 Сен 2018 в 06:26

2 ответа

Лучший ответ

Согласно документации, вы должны изменить значение по умолчанию, установив это в своей модели.

protected $primaryKey = 'product_id';

Не забудьте внести необходимые изменения в ваши отношения таблиц (hasManys, ownTos и т. Д.)

1
Chukwuemeka Inya 13 Сен 2018 в 05:26

Вы можете изменить на:

$table->integer('product_id')->primary();
0
tringuyen 13 Сен 2018 в 03:37