说我的应用程序出售盒子,所以我的基本型号是一个框。
但是,我将有一个表单,它将为每个框特性(例如框颜色,框尺寸,框材料等)提供选项。
这些选项将是从我的API返回的资源。
由于这个原因,我想知道他们是否必须在MVC世界中成为个别模型。例如,要获取框颜色的表单选项,拥有诸如http://example.test/api/box-colors之类的特定端点是有意义的吗?
我的想法是,所有这些特征都将在同一模型下,并且可以从一个端点返回。这里最好的方法是什么?
您可以像box_colors,box_dimensions,box_materials等所提到的不同表一样。但是,我想这些值很少会更改。然后,您可以将它们组合到一个表中:
表: box_options
:
-
id
:主键,自动增量 -
type
:字符串或枚举,值可以为box_color
,box_dimension
etc -
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');