Должны ли опции выбора формы быть отдельными моделями в REst API? - PullRequest
0 голосов
/ 17 февраля 2019

Допустим, мое приложение продает коробки, поэтому моя базовая модель - это коробка.

Однако у меня будет форма, в которой будут доступны параметры выбора для каждой характеристики коробки (например, цвет коробки, размеры коробки, материал коробки и т. Д.).

Эти параметры будут ресурсами, возвращенными из моего API.

По этой причине мне было интересно, должны ли они быть отдельными моделями в мире MVC.Например, имеет ли смысл выбрать конкретную конечную точку, такую ​​как http://example.test/api/box-colors, и т. Д., Чтобы получить параметры формы для цветов блока?

Моя идея заключалась в том, что все эти характеристики будут относиться к одной модели и могут быть возвращены из одной конечной точки.Какой лучший подход здесь?

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете иметь разные таблицы, как вы упомянули для box_colors, box_dimensions, box_materials и т. Д. Однако, я полагаю, эти значения будут меняться очень редко.Вы можете объединить их в одну таблицу:

Таблица: box_options:

  • id: первичный ключ, автоинкремент
  • type: строкаили enum, значения могут быть box_color, box_dimension и т. д.
  • value: строка, значение указанного типа.

Например, если вы хотите сохранить 2цвета коробки и 2 размера коробки:

|id   |type         |value   |
|_____|_____________|________|
|1    |box_color    | red    |
|2    |box_color    | blue   |
|3    |box_dimension| 50X50  |
|4    |box_dimension| 70X70  |

В вашей красноречивой модели:

<?php 

Class BoxOption extends Model{

    protected $table = 'box_options';

    const BOX_COLOR_TYPE = 'box_color';
    const BOX_DIMENSION_TYPE = 'box_dimension';
    const BOX_MATERIAL_TYPE = 'box_meterial';

    public function scopeColor($query){

        return $query->where('type', self::BOX_COLOR_TYPE);
    }

    public function scopeDimension($query){

        return $query->where('type', self::BOX_DIMENSION_TYPE);
    }

    public function scopeMaterial($query){

        return $query->where('type', self::BOX_MATERIAL_TYPE);
    }
}

И тогда вы можете легко получить это:

<?php 

$colors = BoxOption::color()->get()->pluck('value');
$dimensions = BoxOption::dimension()->get()->pluck('value');
$materials = BoxOption::material()->get()->pluck('value');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...