TP6 ------withSearch使用
withSearch可以参考官方文档,开发逻辑是controller--->business->model,首先从最底model讲起
1.model需要去创建一个模型叫goods,如果是联表查询的话就需要将多个model引用以后用sql语句筛选成一张表先执行join,其次才是搜索到的数据,后续会更新联表查询的内容
<?php
/***Created by giveLive*user:lingm*Date:2021/11/1*timer:下午 7:41*Atom:现在的努力是为了小时候吹过的NB**/namespace app\common\model\mysql;class Goods extends ModelBase
{/*** 通过withSearch触发searchTitleAttr方法* @param $query* @param $value*/public function searchTitleAttr($query,$value){//sql语句模糊查询参考如下语句//select * from tp_goods where title like "%bai";//select 字段名 from 表名 where 查询的模糊字段名 like 查询的内容$query->where('title','like','%'.$value.'%');}public function searchCreateTimeAttr($query,$value){$query->whereBetweenTime('create_time',$value[0],$value[1]);}/*** 获取分页数据* @param $data* @param int $num* @return \think\Paginator* @throws \think\db\exception\DbException*/public function getLists($likeKeys,$data,$num = 10){$order = ["id" => "desc","listorder" => "desc"];if (!empty($likeKeys)){//data不是空的就走以下sql语句,传递内容//withsearch传递的第一个参数是field,第二个是data,字符型,之后是前缀$res = $this->withSearch($likeKeys,$data);}else {//如果data是空则走list对此重新赋值$res$res = $this;}$list = $res->whereIn("status",[0,1])->order($order)->paginate($num);echo $this->getLastSql();return $list;}
}
2.model创建好后,我们就是要在business中创建goods
<?php
/***Created by giveLive*user:lingm*Date:2021/11/1*timer:下午 6:55*Atom:现在的努力是为了小时候吹过的NB**/
namespace app\common\business;use app\common\model\mysql\Goods AS GoodsModel;
use app\common\business\GoodsSku AS GoodsSkuModel;
class Goods extends BusBase
{public $CategoryModel = null;//用__construct拦截指定赋值到模型public function __construct(){$this->CategoryModel = new GoodsModel();}/*** 创建getlists方法调用model下床的getlists* @param $data* @param int $num* @return array*/public function getLists($data,$num = 5){//定义一个模糊查询的空数组$likeKeys = [];//传递控制器层的data内容if (!empty($data)){$likeKeys = array_keys($data);//打印likekeys内容
// halt($likeKeys);}try {$list = $this->CategoryModel->getLists($likeKeys,$data,$num);$result = $list->toArray();}catch (\Exception $e){//调用封装在Arr下的getPageintaDefultData方法$result = Arr::getPageintaDefultData($num);}return $result;}}
3.在controller中去创建index方法,将接收到的title和 time传递过去
public function index(){$title = input("param.title","","trim");$time = input("param.time","","trim");$data = [];//如果输入的内容不是空的那就对应到输入的内容和if (!empty($title)){$data['title'] = $title;}//如果输入的时间不是空的if (!empty($time)){$data["create_time"] = explode("-",$time);}//调用获取分页的数据列表$goods = (new GoodsBis())->getLists($data,5);
// halt($goods);return view("",["goods" => $goods,]);}
}
最后我们打印下看数据
如果我们不传递title和time则走的是正常获取的数据,也就是model中getLists方法中的
$res->whereIn("status",[0,1]) ->order($order)->paginate($num); 语句,如果传递title数据则是
而此时我们出发的就是goods模型下的 这个字段,走的逻辑就是
$query->where('title','like','%'.$value.'%');
public function searchTitleAttr($query,$value){//sql语句模糊查询参考如下语句//select * from tp_goods where title like "%bai";//select 字段名 from 表名 where 查询的模糊字段名 like 查询的内容$query->where('title','like','%'.$value.'%');}
综上所述逻辑就是如果传递title就是会触发searchTitleAttr方法,如果传递time就会触发searchCreateTimeAttr方法,如果tiitle和time一起传递则都触发。
目前就是这样,下一篇会更新联表查询的内容。
TP6 ------withSearch使用相关推荐
- crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
- PHP安装TP6的composer install报Undefined index: process 进程依赖于proc_open 这个函数不可用
报错:安装tp6时候的报错 方法一 翻译:进程依赖于proc_open 这个函数,在我安装的PHP中这个函数不可用. 禁用函数去掉这个即可,在php.ini文件里面 使用/proc_open 找到 ...
- thinkphp开启子域名无法正常访问_解决TP6报错“当前访问路由未定义或不匹配”...
如果是报路由错误,则说明启用了路由控制,那么所有被访问的页面都需要配置路由,否则将无法访问. 例如: 在浏览器中运行http://hml.tp6.com/admin/getlog 报错:当前访问路由未 ...
- thinkphp仿素材火教程_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
- Chrome调试vue项目时session异常,后端tp6 session使用异常
Chrome调试时跨站不能设置cookie问题 this set-cookie didn't specify a "SameSite" attribute,然后变成默认Lax. 然 ...
- tp6 获取session_TP6文档
请求变量 ~~~ use think\facade\Request; Request::param('name'); Request::param();全部请求变量 返回数组 Request::par ...
- Tp6 多应用下路由有些没有效果,这是为什么?
原文地址:https://www.yii666.com/learning/thinkphp/38.html 问题描述 开启多应用后,在公共路由上的一些路由无法使用,或者出现错误信息:当前访问路由未定义 ...
- think-swoole,tp6的websocket实现
TP6的websocket实现 基于tp6,简单实现WebSocket,这一篇就够了. 学习路线 php tp6(事件机制) swoole的websocket实现 think-swoole在tp6中实 ...
- tp6 防止XSS攻击之表单提交安全校验
对后端做安全措施:转化和过滤 首先:tp6框架已经自带转化危险标签 其次:使用tp6做过滤掉危险标签 安装 composer 安装插件来处理 composer require ezyang/htmlp ...
最新文章
- Axure RP 第一部分
- 自己动手实现OpenGL之glViewPort(一)
- python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹
- js操作cookie的函数
- python爬虫教程大全
- Android之Only fullscreen opaque activities can request orientation
- java学习(172): 使用class实现反射编程,创建对象
- spring boot注解_Spring-boot(二)注解
- 摄影测量学——解析法相对定向
- python defaultdict 递归_在Python中使用defaultdict初始化字典以及应用方法
- 3dplanesoft 30全套注册码
- 从零开始学Android(一)
- Dagger2 学习
- mac安全性与隐私 不允许_隐私不仅仅是安全
- python打开pdf文档
- [Linux学习笔记] 浅谈信号(文章含不少学习资源)
- 给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐
- java编写打字游戏_程序设计:简单字母打字游戏(JAVA编写)
- 什么是智慧消防?数字孪生技术打造的“智慧消防”系统管控云平台了解一下
- 今日头条上线或将搜索广告:自媒体平台进入盈利时代