EcshopX后端操作文档

官方文档给的太过于深奥(哈哈哈哈 实际上是博主技术有限),只能边借助官方文档边研究,大致弄明白了以下的几个地方:
手动给自己的文档打满分twemoji-1f606

基础使用

  • 数据接收与验证

      ### 接收get、post、put、delete请求参数
      $inputData = $request->input();
    
      ### 数据验证
      $validator = app("validator")->make($inputData,[
          "page" => "required|integer|min:1",
          "pageSize" => "require|integer",
      ]);
    
      ### 如有带参请求
      public function deleteItems($item_id, Request $request){
          $params['item_id'] = $item_id;
      }
    

数据库操作

  • 数据库修改

    在相对应的Bundle文件夹下存在Entities文件夹,文件内存放的是相对应每个表的文件(具体写法参照已有的文件),如果我们需修改字段,只需要增加/删除/修改 相对应的字段,修改完成之后我们执行:php artisan doctrine: migrations:diff进行数据库对比生成相对应的数据库迁移文件,生成相对应的数据库迁移文件后执行php artisan doctrine: migrations:migrate会进行相对应的修改,如果是第一次增加字段的话,写完字段后我们需要执行:php artisan doctrine: generate: entities --filter=DemoBundle这样会自动生成setget方法

    其中demoBundle是你当前增加字段的entities文件所在的bundle在的名字,之后再执行上面的两行

  • 写入数据

    我们发现,当我们新增/删除时,执行php artisan doctrine: migrations:migrate ### 下面我们简称migrate后某些表的数据(例如shop_menu)会被还原,原来他们的数据是通过Json文件配置之后执行上面的命令更新进去的,其中json文件在:storage/static/如果我们需要向某张表写入数据的话,我们要新建一个json文件,下面写一个例子,我们要向companys_roles加入数据:
    storage/static/下新建一个oper.json文件(名字随便起),其中我们执行migrate命令时,走的文件是src/EspierBundle/Console/ConsoleTerminate.php ### 下面简称console,打开console文件,写入一个新的方法:

    public function updateSuppliers()
    {
        $json = file_get_contents(storage_path('static/oper.json')); ### 你写的文件
    
        try{
            $menus = json_decode($json,true);
    
            $RolesService = new RolesService();
            $RolesService->uploadSupplier($menus);
            return true;
        }catch (\Exception $e) {
            return false;
        }
    }
    

    console文件内存在一个handle方法:

    public function handle(ConsoleTerminateEvent $event)
    {
        // get the command that has been executed / 获取已被执行的命令
        $command = $event->getCommand();
    
        // get the output / 获取output
        $output = $event->getOutput();
    
        if ($command->getName() == 'doctrine:migrations :migrate') {
            // 初始化物流公司
            if ($this->initLogistics()) {
                $output->writeln(sprintf('init logistics success'));
            }
    
            if ($this->updateSystemMenus()) {
                $output->writeln(sprintf('update shop menus success'));
            }
    
            if ($this->updateSuppliers()) { ### 这个是我们新加的
                $output->writeln(sprintf("succ"));
            }
        }
    }
    

    其中我们在我们写的在updateSuppliers()内使用了new RolesService(),所以我们需要引入:use CompanysBundle\Services\RolesService;,并且使用了$RolesService->uploadSupplier($menus);所以我们要在RolesService内写一个方法:

    public function uploadSupplier($data)
    {
        $time = time();
        try {
            $conn = app('registry')->getConnection('default');
            $conn->beginTransaction();
    
            foreach($data as $row) { ### 此处需要写一下该表的字段
                $insert = [
                    'role_id'       => $row['role_id'],
                    'company_id'    => $row['company_id'],
                    'role_name'     => $row['role_name'],
                    'permission'    => $row['permission'],
                    'created'       => time(),
                    'updated'       => time(),
                    'role_source'   => $row['role_source'],
                    'active'        => $row['active'],
                ];
                // 如果导入的数据有alias_name
    
                if (!$conn->insert('companys_roles', $insert)) { ### 此处insert('需要插入的表名称','插入数据')
                    throw new StoreResourceFailedException('导入失败');
                    ### 使用了 StoreResourceFailedException 所以要在上面use Dingo\Api\Exception\StoreResourceFailedException;
                }
    
            }
            $conn->commit();
        } catch ( \Exception $e) {
            $conn->rollback();
            throw new StoreResourceFailedException($e->getMessage());
        }
    
        return true;
    }
    

    至此,我们执行的都写好了,只缺少数据了,所以我们还要在我们新建的json文件内写入我们需要写入的数据(此处仅是例子):

    [{
        "role_id": 1,
        "company_id": 1,
        "role_name": "供应商",
        "permission": "{\"shopmenu_alias_name\":[\"goodsphysical\",\"goodsaudit\",\"goodscategory\",\"goodsbrand\",\"goodsmaincategory\",\"goodsattributes\",\"goodsparams\",\"itemtags\",\"physicalupload\",\"servicegoods\",\"tradenormalorders\",\"tradenormalshoporders\",\"aftersaleslist\",\"shippingtemplates\",\"wl-logistics\",\"tradeservice\",\"tradeverification\",\"servicepayment\",\"mallreservation\",\"reservationsetting\",\"reservationorder\",\"ordersetting\",\"order-Refunderrorlogs\",\"kdniao\"],\"version\":\"1\"}",
        "created": "1578465031",
        "updated": "1578465031",
        "role_source": "platform",
        "active": "1"
    }]
    

    这些步骤执行完毕后,我们去执行migrate命令,执行后相对应的表内就会有相对应的数据了~~~

    我们可以看到执行成功

    查看数据库已经写入了

  • 查询数据

    我们想查询哪个表就需要引入相对应的Entities,比如我想查询Operator表的数据,我们需要先在文件内引入:use CompanysBundle\Entities\Operators;,开始查询:

    $this->operatorsRepository = app('registry')->getManager('default')->getRepository(Operators::class);### Operator 对应你要查询的表
    
    $this->operatorsRepository->findBy($filter); ### $filter为查询的条件 数组
    

    更多的查询方法及更新、删除方法参考官方文档

    我们查询数据或者写入数据时,可能会发现我们新加的字段没有被写入或者查询出来,这个时候我们需要去Repositories文件夹下找到相对应的Repositories文件,设置一下相对应字段的set数据与get数据

  • 常用数据表

    该程序200左右的数据表,目前仅仅使用的数据表如下:

    • items 商品数据表
    • operators 会员账号
    • companys_activity 会员关联表
    • companys_roles 角色权限表
    • distribution_distributor 经销商
    • companys_employee_rel_roles 权限与账号绑定表

    其他的数据表参考官方给的数据字典~~

    后续会不断更新该文档,前端的文档待整理~~~
    不过,这个项目有点难搞哦,还要继续学习啊

本博客所有文章如无特别注明均为原创。作者:止语复制或转载请以超链接形式注明转自 止语-编程学习分享
原文地址《EcshopX后端操作文档

相关推荐

发表评论

路人甲
看不清楚?点图切换

网友评论(0)