Как правильно построить БД для хранения списковых, мультисписковых и текстовых значений?

Здравствуйте жители Тостера!
Есть миграция для "сделок", и у сделки может быть прикрепленная сущность "ребенок" (Связь: многие к одному).
public function up()
    {
        Schema::create('leads', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->unsignedInteger('status_id');
            $table->foreign('status_id')->references('id')->on('statuses');
            $table->unsignedInteger('child_id');
            $table->foreign('child_id')->references('id')->on('children')->onDelete('cascade');
            $table->timestamps();
        });
    }


Также у сделки есть обязательные свойства, которые не меняются (например: status_id).
Задача состоит в том, что необходимо написать миграцию для хранения дополнительных свойств сделки, причем свойства могут быть разных типов(список, мультисписок, текст и т.д.).
Также необходимо написать миграцию для хранения настроек для этих самых свойств с возможностью добавлять, удалять и изменять (кроме типа) свойства для сделки.
  • Вопрос задан
  • 260 просмотров
Решения вопроса 1
@Kostik_1993
Web Developer
Интересный у вас проект. Сделка, ребенок... надеюсь не торговля ими))

Для того чтобы так сделать вам нужно завести таблицы
1. properties в ней вам понадобятся id, название свойства(пол ребенка, рост, вес или что у вас там), единицы измерения(кг, шт.), тип свойства (текст, число, дата, список, кнопка, чекбокс и т.д.)

2. В зависимости от типа свойства вам может понадобиться предлагать варианты, это как раз относится к спискам
Тут все зависит от того как вы будете их хранить. Можно завести таблицу, можно хранить в JSON в самом свойстве
Если вариант с таблицей то тогда
property_values
id|prop_id|value

2. Это таблица связь ребенка или сделки со свойством. В примере возьмем сделку
lead_property
id|prop_id|lead_id|value

Можно использовать такой пакет. Я с ним не работал не знаю плохой он или хороший
https://sunel.github.io/eav/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы