Имя модели полиморфных отношений Laravel сохраняется вместо типа

Я использую полиморфные отношения «один к одному», чтобы иметь несколько типов продуктов с общими полями, чтобы оптимизировать структуру базы данных. У меня есть родительская модель Product и модель обуви.

Проблема в том, что каждый раз, когда я сохраняю продукт (и обувь, и продукт), и возникает взаимосвязь (productable_id сохраняется правильно) в productable_type вместо того, чтобы видеть App\Models\Shoe я понимаю App\Models\Product и я не знаю, откуда это.

Вот методы отношений:

В Product.php

      public function productable() {
    return $this->morphTo();
}

В Shoe.php

      public function product() {
    return $this->morphOne('App\Models\Product', 'productable');
}

миграция таблицы товаров:

      $table->id();
$table->foreignId('product_model_id')->constrained('product_models');
$table->foreignId('owner_id')->nullable()->constrained('users')->onUpdate('cascade'); // fields for the model and the product's owner
$table->integer('productable_id');
$table->string('productable_type');

1 ответ

Сначала создайте Shoe -

      $shoe = new Shoe();
// after assign value
$shoe->save();

// then create Product
$shoe->product()->create($yourProductData);
Другие вопросы по тегам