ThinkPHP6四维数组添加以及修改完美封装

本文详细介绍了在ThinkPHP6中如何处理四维数组,特别是商品后台管理中的添加与修改操作。内容包括:商品类型入库、商品属性入库、商品规格入库及其值的处理,涉及数组组装、非空处理和事务处理。同时,通过封装Businesses和Common,实现了代码解耦。在修改操作中,采用先删除后新增的方式,以简化逻辑,但存在效率问题。
摘要由CSDN通过智能技术生成

例:四维数组添加

实现思路

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值