smidl
@smidl
WordPress-разработчик

Как хранить атрибуты «товара» в laravel, если есть общие и уникальные атрибуты?

У меня есть сущность - ТОВАР

Сами товары разделяются на подгруппы. К примеру: запчасти, шины, аккумуляторы.

У всех товаров есть общие поля:
-название
-категория
-дата публикации
...

А есть уникальные, присущие только некоторым категориям товаров
-радиус
-высота протектора и т.д.

Как хранить атрибуты "товара" в таком случае?

Я думал сделать таблицу с названиями атрибутов и привязкой их к категориям товаров + таблицу со значениями атрибутов с привязкой к самому товару.

Но как быть с общими атрибутами и как быть с атрибутами, которые могут быть сразу у нескольких категория товаров?
  • Вопрос задан
  • 330 просмотров
Пригласить эксперта
Ответы на вопрос 3
@EvgeniiR
https://github.com/EvgeniiR
Вообще, то что вы сделали называется EAV(Entity, Attribute, Value), красивее и быстрее можно делать используя json - https://coussej.github.io/2016/01/14/Replacing-EAV...

Из-за общих полей проблемы вряд ли возникнут, рано пока оптимизировать.
Ответ написан
@potkot
PHP программист
Я бы сделал (да и делал) так:
Общие поля прямо в таблице Товары
Атрибуты (характеристики): Таблица характеристик, Таблица привязки характеристики к категории, Таблица значений характеристики для товара.
Ответ написан
@lavren
Для этого есть обычная реализация мета полей.

Это таблица полей (пример)
Schema::create('metas', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('key')->index();
            $table->text('value')->nullable();
            $table->uuid('post_id');
            $table->text('post_type');
            $table->timestamps();
        });


В модели выставляются полиморфные отношения:
public function meta() {
        return $this->morphMany('App\Meta', 'post');
    }


Полиморфные сделаны для того чтобы поля можно было использовать для любых моделей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Glamy Санкт-Петербург
от 120 000 до 180 000 руб.
Договор24 Казань
от 60 000 до 100 000 руб.