laravel——表操作集成操作
背景:通过判断不同的请求参数,返回不同的需要的数据
一、准备工作:
数据库新建一个表
- 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-
laravel——表操作集成操作的更多相关文章
- Laravel框架数据库CURD操作、连贯操作使用方法
Laravel框架数据库CURD操作.连贯如何来操作了这个操作性是非常的方便简单了我们在这里来为各位介绍一篇相关的教程,具体的细节步骤如下文介绍. Laravel是一套简洁.优雅的PHP Web开 ...
- Laravel框架数据库CURD操作、连贯操作
这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...
- Laravel框架数据库CURD操作、连贯操作总结
这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 复制代码代码如下: $use ...
- [转]Laravel 4之数据库操作
Laravel 4之数据库操作 http://dingjiannan.com/2013/laravel-database/ 数据库配置 Laravel数据库配置在app/config/database ...
- Asp.Net MVC +EntityFramework主从表新增编辑操作的实现(删除操作怎么实现?)
Asp.Net MVC +EntityFramework主从表新增编辑操作的实现 对于MVC中同时对主从表的表单操作在网上现有的解决很少,而这样的操作在做业务系统中是经常为遇到的.我在网上搜索了很久都 ...
- Oracle中如何实现Mysql的两表关联update操作
在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...
- ThinkPHP 表单提交操作成功后执行JS操作如何刷新父页面或关闭当前页等操作
ThinkPHP 表单提交操作成功后执行JS操作如何刷新父页面或关闭当前页等操作 .操作成功后刷新父页面 $this->assign('jumpUrl', "javascript:wi ...
- PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现 - [ PHP内核学习 ]
catalogue . PHP Hash表 . PHP数组定义 . PHP变量实现 . PHP常量实现 1. PHP Hash表 0x1: 基本概念 哈希表在实践中使用的非常广泛,例如编译器通常会维护 ...
- js 节点 document html css 表单节点操作
js 节点 document html css 表单节点操作 节点操作:访问.属性.创建 (1)节点的访问:firstChild.lastChild.childNodes.parentChild(父子 ...
随机推荐
- pandas filter数据筛选
https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&shareId=400000000398 ...
- np.meshgrid
- ResponseBody和文件上传
SpringMVC默认使用MappingJacksonHttpMessageConverter对json数据进行转换 <dependency> <groupId>com.fas ...
- git pull的时候提示git pull <remote> <branch>
yuanqiao@yuanqiao-PC MINGW64 /h/WorkSpace/git/dadeTest (dev)$ git pullremote: Enumerating objects: 7 ...
- [LeetCode] 137. Single Number II 单独数 II
Given a non-empty array of integers, every element appears three times except for one, which appears ...
- [LeetCode] 325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...
- [LeetCode] 504. Base 7 基数七
Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ...
- 如何杀死处于进程状态D的进程
D状态的就是 uninterruptible sleep ,此时进程不能被信号唤醒,GDB等调试工具也不能对它调试,因为GDB也是用到了信号,也杀不死它 D状态的形成 如何分析D状态 cat /pro ...
- app内嵌h5页面在ios手机端滑动卡顿的解决方法
1.带滚动条的dom需加样式 -webkit-overflow-scrolling: touch;2.去掉 width:100%; height:100%
- QT笔记--事件处理
1 事件是什么 这里的事件主要是用户输入事件,比如点击一个按钮,选中复选框等.当事件发生的时候,达到我们满意的效果. 2信号与槽 connect(A,XX,B,YY) 当A事件发生的时候,B中的处理函 ...