例:四维数组添加
实现思路
1.观察MVC项目中商品后台添加商品模型的表单,类推出了一个数组:
2.针对上面的数组,可能会有空值现象,要进行适当过滤
3.首先要将商品类型信息入库,因为后续跟商品类型id有关联
4.将商品属性信息入库,此时涉及到数组的组装,以及属性值的转换
5.将商品类型对应的规格信息入库,此时也涉及到数组的组装,跟商品类型id有关
6.将商品类型对应的规格的规格值入库,此时还涉及到数组转换,关联的有:商品类型id和商品类型对应的规格id
7.整个逻辑要保证一致性和完整性,必须借助事务实现
8.由于逻辑较为复杂,特将控制器所应执行的逻辑分别拆分至Businesses和Common中做二次封装,实现代码的高度解耦
$data = [
'type_name' => '西裤',
'attr' => [
[
'name' => '毛重',
'sort' => 100,
'value' => ['500g', '', '2000g', '5000g', '']
],
[
'name' => '产地',
'sort' => 100,
'value' => ['国产', '港货', '美版']
]
],
'spec' => [
[
'name' => "颜色",
'sort' => 100,
'value' => ['黑色', '灰色', '蓝色', '红色', '白色', '', '']
], [
'name' => "尺码",
'sort' => 100,
'value' => ['S', 'L', 'M', 'XL', 'XXL', "XXXL"]
],
[
'name' => "面料",
'sort' => '100',
'value' => ['棉麻','涤纶','纯棉','羊毛']
]
],
];
封装business
<?php
namespace app\business;
use app\model\Attribute;
use app\model\Spec;
use app\model\SpecValue;
use app\model\Type;
use think\db\exception\DbException;
use think\Exception;
class TypeBusiness
{
protected static $typeId='';
protected static $specData=[];
/**
* 添加模型信息入库
* @param $data
*/
public static function addType($data){
try {
//先将商品类型名称入库,此时能获得到主键id
$type=Type::addType($data);
}catch (DbException $exception){
throw new Exception("商品类型入库失败");
}
self::$typeId=$type->id;
//返回新增的商品模型
return ['type_id'=>$type->id,'type_name'=>$type->type_name];
}
/**
* 规格信息入库保存的逻辑
* @param $data
*/
public static function addSpec($data){
//组装spec表所需数据
$spec = [];
foreach ($data['spec'] as $val) {
$spec[] = [
'type_id' => self::$typeId,
'spec_name' => $val['name'],
'sort' => $val['sort'],
];
}
try {
//将商品类型对应的规格入库,此时会返回规格主键id
self::$specData = (new Spec())->addSpec($spec);
}catch (DbException $exception){
throw new Exception("商品规格入库失败");
}
}
/**
* 规格值信息入库保存逻辑
* @param $data
*/
public static function addSpecValue($data){
//取出specVa