laravel神器教你一秒搞定增删改查业务模块-composer包query-common

本文主要是介绍laravel神器教你一秒搞定增删改查业务模块-composer包query-common,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

laravel神器教你一秒搞定增删改查业务模块

还在为了不断写增删改查而烦恼不堪嘛?还在为了重复写代码而头疼嘛?这个laravel神器拯救你的大脑,解放你的双手。让你有更多的时间去写出更好的代码。

安装

首先使用composer安装

composer require thepatter/query-common

安装之后创建一个command

php artisan make:command MakeQueryCommand

把下面的内容复制粘贴进去

<?phpnamespace App\Console\Commands;use Illuminate\Support\Str;
use InvalidArgumentException;
use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputOption;class MakeQueryCommand extends GeneratorCommand
{/*** The console command name.** @var string*/protected $name = 'make:queryController';/*** The console command description.** @var string*/protected $description = 'Create a new queryController class';/*** The type of class being generated.** @var string*/protected $type = 'QueryController';/*** Get the stub file for the generator.** @return string*/protected function getStub(){return resource_path('stubs/queryController.stub');}/*** Get the default namespace for the class.** @param  string  $rootNamespace* @return string*/protected function getDefaultNamespace($rootNamespace){return $rootNamespace.'\Http\Controllers';}/*** Build the class with the given name.** Remove the base controller import if we are already in base namespace.** @param  string  $name* @return string*/protected function buildClass($name){$controllerNamespace = $this->getNamespace($name);$replace = [];if ($this->option('model')) {$replace = $this->buildModelReplacements($replace);}$replace["use {$controllerNamespace}\Controller;\n"] = '';return str_replace(array_keys($replace), array_values($replace), parent::buildClass($name));}/*** Build the model replacement values.** @param  array  $replace* @return array*/protected function buildModelReplacements(array $replace){$modelClass = $this->parseModel($this->option('model'));if (! class_exists($modelClass)) {if ($this->confirm("A {$modelClass} model does not exist. Do you want to generate it?", true)) {$this->call('make:model', ['name' => $modelClass]);}}return array_merge($replace, ['DummyFullModelClass' => $modelClass,]);}/*** Get the fully-qualified model class name.** @param  string  $model* @return string*/protected function parseModel($model){// if (preg_match('([^A-Za-z0-9_/\\\\])', $model)) {//     throw new InvalidArgumentException('Model name contains invalid characters.');// }$model = trim(str_replace('/', '\\', $model), '\\');if (! Str::startsWith($model, $rootNamespace = $this->laravel->getNamespace())) {$model = $rootNamespace.$model;}return $model;}/*** Get the console command options.** @return array*/protected function getOptions(){return [['model', 'm', InputOption::VALUE_OPTIONAL, 'Generate a query controller for the given model.'],];}
}

在resources文件夹下创建stubs文件夹,在stubs文件夹下面创建QueryController.stub文件,把下面内容复制粘贴进去

<?phpnamespace DummyNamespace;use Illuminate\Http\Request;
use DummyRootNamespaceHttp\Controllers\QueryList\QueryController;
use App\Exceptions\CommonException;class DummyClass extends QueryController
{/*** 字典数组* ['表里的字段名' => '字典code',...]*/protected $dicArr = [];/*** 字段映射 可选,不填默认转成下划线格式* ['搜索字段' => '表字段',...]*/protected $filedsAdapter = [];/*** 创建时候的字段映射 可选,不填默认转成下划线格式* ['输入字段' => '表字段']*/protected $createAdapter = [];//定义表名 格式: table as tprotected $shortTableName;protected function getModel() {return new "DummyFullModelClass";}/** 查询列表* @route get.api/lists*/public function getList(Request $request){try{//检查页码,搜索条件等$this->pageValid();//返回数据return $this->success($this->pageList());} catch (Exception $ex) {}}  /*** 创建* @route post.api/info*/function createInfo(Request $request) {try{//创建$this->create($request->all());return $this->success(true);}catch(Exception $ex) {}}/*** 更新* @route put.api/info/{id}*/function updateInfo(Request $request, $id) {try{//查询记录$detail = $this->getModel()->find($id);if (empty($detail)) {//补充错误信息throw new CommonException();}//更新$this->update($id,$request->all());return $this->success(true);}catch(Exception $ex) {}}/*** 查询一条记录* @route get.api/info*/function detail(Request $request) {try{$rules = ['id'=>'required',];$messages = ['id.required'=>'id为必填项',];//验证$this->valid($request, $rule, $messages);//查询记录$detail = $this->getModel()->find($id);if (empty($detail)) {//补充错误信息throw new CommonException();}return $this->success($detail);}catch(Exception $ex) {}}/*** 删除一条记录* @route delete.api/info/{id}*/function deleteInfo(Request $request, $id) {try{//查询记录$model = $this->getModel();$detail = $model->find($id);if (empty($detail)) {//补充错误信息throw new CommonException();}//进行删除$res = $model->where('id', $id)->delete();return $this->success(true);}catch(Exception $ex) {}}}

创建业务逻辑

这时候执行创建的artisan命令就可以了

php artisan make:queryController your controller path -m your model path

这时候在你的Controller下面就会多出一个Controller文件,你只需要在路由中添加路由就可以了。

这个库的github地址在下面,感兴趣的朋友可以看一下。

https://github.com/Thepatterraining/queryCommon

这篇关于laravel神器教你一秒搞定增删改查业务模块-composer包query-common的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857032

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测