Laravel Polymorphic HasOne, модели двух разных категорий для одного и того же элемента
Я пытаюсь использовать две разные модели категорий для одного и того же items
Таблица.
У меня есть 3 модели
SystemCategory
Schema::create('system_categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->timestamps();
});
UserCategory
Schema::create('user_categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->integer('user_id');
$table->timestamps();
});
Пункт
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->integer('categoryable_id');
$table->string('categoryable_type');
$table->timestamps();
});
Категория товара может быть из system_categories
или user_categories
Таблица
Я видел некоторые полиморфные отношения, но речь идет о том, как две разные модели могут принадлежать к одной категории, а не о том, как модель может принадлежать к двум разным моделям категорий.
Спасибо.
1 ответ
Решение
Это можно сделать, во-первых, ваша схема выглядит нормально, но вы хотите установить для catagoryable_id значение bigInteger, чтобы оно соответствовало столбцам идентификаторов двух таблиц категорий.
Затем вы бы настроили свои модели
class Item extends Model
{
public function categoryable()
{
return $this->morphTo();
}
}
class SystemCategory extends Model
{
public function items()
{
return $this->morphMany('App\Item', 'categoryable');
}
}
class UserCategory extends Model
{
public function items()
{
return $this->morphMany('App\Item', 'categoryable');
}
}
Очевидно, это предполагает, что ваши модели находятся в пространстве имен App