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

Другие вопросы по тегам