表单选择选项是否需要成为REst API中的单个模型?

时间:2019-02-17 10:28:26

标签: php laravel rest

假设我的应用程序销售盒子,所以我的基本模型是盒子。

但是,我会有一个表格,该表格将为每个包装盒特征(例如包装盒颜色,包装盒尺寸,包装盒材料等)提供选择选项。

这些选项将是从我的API返回的资源。

由于这个原因,我想知道在MVC世界中它们是否也必须是单独的模型。例如,要获取框颜色的表单选项,是否有一个特定的端点(例如http://example.test/api/box-colors等)有意义吗?

我的想法是所有这些特征都将在同一模型下,并且可以从一个端点返回。最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以为box_colors,box_dimensions,box_materials等使用不同的表。但是,我想这些值很少会改变。您可以将它们合并到一个表中:

表格:box_options

  • id:主键,自动递增
  • type:字符串或枚举,值可以为box_colorbox_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');