Схема Laravel DB при обращении к двум таблицам
Существует возможность, называемая "интересами", в которой хранятся идентификаторы "категорий" и / или "брендов", в которых заинтересован каждый пользователь. Чтобы предотвратить создание двух отдельных таблиц для user_category_interests
а также user_brand_interest
Я добавил столбец перечисления под названием type
,
Теперь я не могу понять, как мне создать миграцию в Schema Builder, Как установить отношения и внешние ключи,... чтобы воспользоваться преимуществами методов Eloquent.
Schema::create('user_interests', function (Blueprint $table) {
$table->increments('id');
$table->enum('type', ['categories', 'brands']);
$table->integer('reference_id')->unsigned();
$table->timestamps();
});
Есть ли лучший способ вместо создания двух отдельных таблиц и моделей?
PS я пользуюсь laravel 5.4
Brands Table:
id | name
-----------
1 | Adidas
2 | Nike
3 | Puma
Categories Table:
id | name
-----------
1 | Clothes
2 | Luxury
3 | Sport Wear
User_Interests Table:
id | user_id | type | reference_id
-----------------------------------------
1 | 113 | 'brand' | 2
1 | 113 | 'brand' | 3
2 | 113 |'category'| 3
3 | 224 | 'brand' | 1
1 ответ
Да - читайте документы по полиморфным отношениям.
Он работает так же, как у вас, но у вас могут быть столбцы interestable_id
а также interestable_type
(вы можете настроить это на что-то другое, если хотите). interestable_type
в буквальном смысле будет строковое представление имени класса, на который ссылаются, как App\Brand
или же App\Category
а также interestable_id
будет основным ключом этой модели.
Лучшая часть в том, что все это делается через Eloquent, уже хорошо идти с ассоциациями, энергичной загрузкой и т. Д.
Изменить: я должен добавить, что ваши настройки 3 таблицы по-прежнему являются лучшим способом для представления этой структуры, просто предлагая имена столбцов, которые вы используете, и как подключить его с Eloquent.