背景:通过判断不同的请求参数,返回不同的需要的数据

一、准备工作:

数据库新建一个表

DROP TABLE IF EXISTS `tb_category2`;

CREATE TABLE IF NOT EXISTS `tb_category2` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`category_id` int(10) UNSIGNED DEFAULT NULL COMMENT '一级品类id',
`ename` varchar(64) NOT NULL COMMENT '英文名',
`cname` varchar(64) NOT NULL COMMENT '中文名',
`seq` int(10) UNSIGNED NOT NULL COMMENT '排序序号',
PRIMARY KEY (`id`),
UNIQUE key `category_id_index` (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET=utf8 COMMENT = '二级业务品类'; // 如果主键设置了自增 末尾不必再设置AUTO_INCREMENT 或者 AUTO_INCREMENT = 0

导入数据:

INSERT INTO `tb_category2` (`category_id`, `ename`, `cname`, `seq`)
VALUES ( '1', 'MOBA', 'MOBA', '1'), ( '1', '战争策略', '战争策略', '2') // UNIQUE 表示为唯一值,category_id设置唯一后插入相同值会报错!需要删除上面的设置

二、新建调用方法:

1.五类路由:获取/搜索、新增、修改、设置(无新建、有修改)、删除

Route::post('business/getCategory2Info', 'ProjectController\BusinessManage\BusinessCategory2@getCategory2Info');
Route::post('business/addCategory2Info', 'ProjectController\BusinessManage\BusinessCategory2@addCategory2Info');
Route::post('business/updateCategory2Info', 'ProjectController\BusinessManage\BusinessCategory2@updateCategory2Info');
Route::post('business/setCategory2Info', 'ProjectController\BusinessManage\BusinessCategory2@setCategory2Info');
Route::post('business/delCategory2Info', 'ProjectController\BusinessManage\BusinessCategory2@delCategory2Info');

2.直接调用的方法:用于获取请求参数

<?php
namespace App\Http\Controllers\ProjectController\BusinessManage;//命名空间
use App\Http\Controllers\ProjectModel\BusinessManage\Category2Info;//间接操作
use App\Http\Controllers\ProjectModel\JsonRequest; //格式化数据
// 文件名 = 类名 (否则报错)
class BusinessCategory2
{
//构建实例
private $json_request;
private $categoryInfo;
public function __construct()
{
$this->json_request = resolve(JsonRequest::class);
$this->category2Info = new Category2Info();//统一请求,定义在Database外部
} //获取/搜索
public function getCategory2Info()
{
$category2_id = $this->json_request->get( 'category2_id');
$res = $this->category2Info->getTbCategory2Info($category2_id);
return response()->success($res);
}
//新增:没有对象的概念,建议单独传参数
public function addCategory2Info()
{
$params = []
$params['category2_id'] = $this->json_request->get( 'category2_id');
$params['ename'] = $this->json_request->get( 'ename');
$params['cname'] = $this->json_request->get( 'cname');
$res = $this->category2Info->addTbCategory2Info($params);
return response()->success($res);
}
//修改:同上
public function updateCategory2Info()
{
$params = []
$params['id'] = $this->json_request->get( 'id');
$params['category2_id'] = $this->json_request->get( 'category2_id');
$params['ename'] = $this->json_request->get( 'ename');
$params['cname'] = $this->json_request->get( 'cname');
$res = $this->category2Info->updateTbCategory2Info($params);
return response()->success($res);
} //设置:新建或修改
public function setCategory2Info()
{
$params_list = $this->json_request->get( 'params_list');
$res = $this->category2Info->setTbCategory2Info( $params_list);
return response()->success($res);
}
//删除
public function delCategory2Info()
{
$id = $this->json_request->get('id');
$res = $this->category2Info-> delTbCategory2Info($id);
return response()->success($res);
}
}

3.中间件处理:用于处理相关表的逻辑,如不可删除已关联的数据

方式1:路由中拦截(middleware()是全局方法,如权限控制)

Route::post('business/getCategoryInfo', 'ProjectController\BusinessManage\BusinessCategory@getCategoryInfo')->middleware('WriteableMiddleware:related');

方式2:中间件处理

<?php
namespace App\Http\Controllers\ProjectModel\BusinessManage;
use App\Http\Controllers\ProjectModel\BusinessManage\Database\TbCategory2Info;
use App\Http\Controllers\ProjectModel\ActivityManage\Logic\ActivityList;
use App\Http\Controllers\ProjectModel\Common\Protocol\Errors\Logic\Error;
class Category2Info { private $TbCategory2Info; public function __construct()
{
$this->tbCategory2Info = new TbCategory2Info();
} /**
* 获取 / 搜索
* @param null / string
* @return array
**/
public function getTbCategory2Info($category2_id)
{
$info = $this->tbCategory2Info->getCategory2Info($category2_id);
return $info;
}
/**
* 新增:递增到最后一列
* @param object
* @return object
**/
public function addTbCategory2Info($params)
{
$info = $this->tbCategory2Info->addCategory2Info($params);
return $info;
}
/**
* 修改:某一列
* @param object
* @return object
**/
public function updateTbCategory2Info($params)
{
$info = $this->tbCategory2Info->updateCategory2Info($params);
return $info;
}
/**
* 设置:遍历新建或修改
* @param array
* @return array
**/
public function setTbCategory2Info($params_list)
{
$info = $this->tbCategory2Info->setCategory2Info($params_list);
return $info;
}
/**
* 删除:【添加表的关联限制】
* @param string / number
* @return object
**/
public function delTbCategory2Info($category2_id)
{
$activityClass = resolve_class(ActivityList::class);
$activityList = $activityClass::search(["activity.category2.id"=>$category2_id]);
if ( !$activityList->isEmpty() ) {
throw new Error("有活动引用,需要先删除活动");
}else{
return $this->tbCategory2Info->delCategory2Info($category2_id);
}
}
}
?>

3.表的实际操作:

<?php
namespace App\Http\Controllers\ProjectModel\BusinessManage\Database;
use App\Http\Controllers\ProjectModel\Common\Database\EloBusinessBaseDatabase; //父类
class TbCategory2Info extends EloBusinessBaseDatabase {
//表名
protected $table = "tb_category2"; //主键名
protected $primaryKey = "id"; //主键是自增id
public $incrementing = true; //所有字段可以批量修改
protected $guarded = []; /**
* 获取 / 搜索
* @param null / string
* @return array
**/
public function getCategory2Info($id)
{
$ret = [];
if ($id) { //是否为空
$ret = static::where("id", $id)->get();
} else { //获取所有品类id
$ret = static::all();
}
return $ret;//返回的内容
}
/**
* 新增:递增到最后一列
* @param object
* @return object
**/
public function addCategory2Info($params)
{
if($params['category_id'] && $params['ename'] && $params['cname']){
return static::create( $params);
} else {
return "请求参数不全";
}
}
/**
* 修改:某一列
* @param object
* @return object
**/
public function updateCategory2Info($params)
{
if(!$params['id'] || !$arams['category_id'] || !$params['ename'] || !$params['cname']){
return "请求参数不全";
} else {
return static::where( "id", $business_id)->update($info);
}
}
/**
* 设置:遍历新建或修改
* @param array
* @return array
**/
public function setCategory2Info($param)
{
foreach ($param as $item) {
// 方式1:
if (isset($item->id)) { //id存在:修改
static::where("id", $item["id"])->update($item);
} else { //创建
static::create($item);
}
// 方式2:
// $newItem = static::firstOrNew(["id" => $item->id]);// 返回某一条实例{xxx}
// $newItem->category_id = $item->category_id;
// $newItem->ename = $item->ename;
// $newItem->cname = $item->cname;
// $newItem->save();
}
return static::all(); //返回所有参数
}
/**
* 删除:
* @param string / number
* @return object
**/
public function delCategory2Info($id)
{
if($id){
return static::where( "id", $id)->delete();
} else {
return "参数不可为空";
}
}
}
?>

整合与优化:

<?php
namespace App\Http\Controllers\ProjectModel\BusinessManage\Database;
use App\Http\Controllers\ProjectModel\Common\Database\EloBusinessBaseDatabase; //父类
class TbCategory2Info extends EloBusinessBaseDatabase {
//表名
protected $table = "tb_category2"; //主键名
protected $primaryKey = "id"; //主键是自增id
public $incrementing = true; //所有字段可以批量修改
protected $guarded = []; /**
* 获取 / 搜索
* @param null / string
* @return array
**/
public function getCategory2Info($id)
{
$ret = [];
if ($id) { //是否为空
$ret = static::where("id", $id)->get();
} else { //获取所有品类id
$ret = static::all();
}
return $ret;//返回的内容:无参数问题
}
/**
* 新增:递增到最后一列
* @param object
* @return object
**/
public function addCategory2Info($params)
{
if($params['category_id'] && $params['ename'] && $params['cname']){
return static::create( $params);
} else {
return "请求参数不全";
}
}
/**
* 修改:某一列
* @param object
* @return object
**/
public function updateCategory2Info($params)
{
if($params['id'] && $params['category_id'] && $params['ename'] && $params['cname']){
return static::create( $params);
} else {
return "请求参数不全";
}
}
/**
* 设置:遍历新建或修改
* @param array
* @return array
**/
public function setCategory2Info($arr)
{
if(count($arr) > 0){
foreach ($arr as $item) {
if (isset($item->id)) { //id存在:修改
static::where("id", $item->id)->update($item);
} else { //创建
static::create($item);
}
}
return static::all(); //返回所有
} else {
return "请求参数array不可为空";
}
}
/**
* 删除:
* @param string / number
* @return object
**/
public function delCategory2Info($id)
{
if($id){
return static::where( "id", $id)->delete();
} else {
return "请求参数id不可为空";
}
}
}
?>

搜索优化:

    /**
* 获取 / 搜索
* @param null / string
* @return array
**/
public function getCategory2Info($keyword)
{
$allInfo = static::all();
if ($keyword) { //是否为空
// 方式1
$keyWordInfo = [];
// foreach ($allInfo as $curInfo){
// if (strpos($curInfo["ename"], $keyWord) !== false || strpos($curInfo["cname"], $keyWord) !== false){
// $keyWordInfo[] = $curInfo;
// } else {
// return [];
// }
// }
// 方式2
$keyWordInfo = static::where([ //多个条件
['ename', 'like', "%{$keyword}%"],
['cname', 'like', "%{$keyword}%"],
])->get();
return $keyWordInfo;//返回的内容
}else{
return $allInfo;//返回的内容
}
}

 返回报错优化:请求参数有误需要中止返回 throw new Logic\Error("xxx");

<?php
namespace App\Http\Controllers\ProjectModel\BusinessManage\Database;
use App\Http\Controllers\ProjectModel\Common\Database\EloBusinessBaseDatabase; //父类
use App\Http\Controllers\ProjectModel\Common\Protocol\Errors\Logic;
class TbCategory2Info extends EloBusinessBaseDatabase {
/**
* 删除:
* @param string / number
* @return object
**/
public function delCategory2Info($id)
{
if($id){
return static::where( "id", $id)->delete();
} else {
throw new Logic\Error("请求参数id不可为空");
}
}
}
?>

输出方法集:https://www.cnblogs.com/wheatCatcher/p/11215832.html

 php语法:https://www.php.net/manual/zh/language.types.array.php

-end-

最新文章

  1. soapUI请求参数Style与Level使用
  2. shape和selector的结合使用
  3. Mysql常见问题及优化
  4. Java、C#双语版HttpHelper类
  5. 【推荐】PHP中格式化时间函数date与gmdate的区别 | 修改PHP的默认时区
  6. css系列:input的placeholder在safari下设置行高失效
  7. 使用C#在VS中开发:未处理AccessViolationException “System.AccessViolationException”类型的未经处理的异常
  8. 创建元素节点createElement
  9. Jmeter使用JDBC请求简介
  10. docker 安装redis , 让宿主机可以访问
  11. 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)
  12. ASP.NET Core Docker jexus nginx部署-CentOS实践版
  13. 【Java并发核心七】计划任务ScheduleExecutorService
  14. AtCoder Beginner Contest 045 B - 3人でカードゲームイージー / Card Game for Three (ABC Edit)
  15. MYSQL数据删除数据,物理空间没释放
  16. cas单点登录-jdbc认证(三)
  17. ubuntu16.04上Eclipse和hadoop配置
  18. mybatis之Sql语句构建器
  19. VC++ 6.0开发套件(自己收藏!)
  20. Codeforces Round #302 (Div. 2) B. Sea and Islands 构造

热门文章

  1. 000 okhttp3的Get使用
  2. vue---发送数据请求的一些列的问题
  3. Python使用偏函数与类实现装饰器
  4. Python高级笔记(十)闭包
  5. tomcat关闭异常导致的项目无法重启
  6. [转]windows 下 gcc/g++ 的安装
  7. [LeetCode] 167. Two Sum II - Input array is sorted 两数和 II - 输入是有序的数组
  8. Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数
  9. 【视频开发】【CUDA开发】ffmpeg nvenc编码
  10. LeetCode 238. 除自身以外数组的乘积(Product of Array Except Self)