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使用相关推荐

  1. crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究

    thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...

  2. PHP安装TP6的composer install报Undefined index: process 进程依赖于proc_open 这个函数不可用

    报错:安装tp6时候的报错 方法一 翻译:进程依赖于proc_open 这个函数,在我安装的PHP中这个函数不可用. 禁用函数去掉这个即可,在php.ini文件里面  使用/proc_open  找到 ...

  3. thinkphp开启子域名无法正常访问_解决TP6报错“当前访问路由未定义或不匹配”...

    如果是报路由错误,则说明启用了路由控制,那么所有被访问的页面都需要配置路由,否则将无法访问. 例如: 在浏览器中运行http://hml.tp6.com/admin/getlog 报错:当前访问路由未 ...

  4. thinkphp仿素材火教程_thinkphp6学习教程与源码 tp6开源CMS系统源码研究

    thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...

  5. Chrome调试vue项目时session异常,后端tp6 session使用异常

    Chrome调试时跨站不能设置cookie问题 this set-cookie didn't specify a "SameSite" attribute,然后变成默认Lax. 然 ...

  6. tp6 获取session_TP6文档

    请求变量 ~~~ use think\facade\Request; Request::param('name'); Request::param();全部请求变量 返回数组 Request::par ...

  7. Tp6 多应用下路由有些没有效果,这是为什么?

    原文地址:https://www.yii666.com/learning/thinkphp/38.html 问题描述 开启多应用后,在公共路由上的一些路由无法使用,或者出现错误信息:当前访问路由未定义 ...

  8. think-swoole,tp6的websocket实现

    TP6的websocket实现 基于tp6,简单实现WebSocket,这一篇就够了. 学习路线 php tp6(事件机制) swoole的websocket实现 think-swoole在tp6中实 ...

  9. tp6 防止XSS攻击之表单提交安全校验

    对后端做安全措施:转化和过滤 首先:tp6框架已经自带转化危险标签 其次:使用tp6做过滤掉危险标签 安装 composer 安装插件来处理 composer require ezyang/htmlp ...

最新文章

  1. Unable to preview the file. Please open a JS, CSS or HML file of the JS UI framework or a layout.xml
  2. SetupDiGetClassDevs函数详解
  3. python文件操作解码_python基础3之文件操作、字符编码解码、函数介绍
  4. OpenJudge/Poj 1915 Knight Moves
  5. Android Studio自定义模板 做开发竟然可以如此轻松 后篇
  6. 程序员面试金典 - 面试题 05.03. 翻转数位(位运算)
  7. 程序员面试金典 - 面试题 04.10. 检查子树(双重递归)
  8. c语言中转义字符有什么作用,C语言中转义字符有什么作用?
  9. 计算机excel图表考试题库,2016年职称计算机考试Excel操作题库
  10. oracle 视图去重复,CSS_Oracle几种查找和删除重复记录的方法总结,平时工作中可能会遇到当试图 - phpStudy...
  11. 在html中设置常量并做判断,写一篇我所理解的javascript编程规范
  12. 零基础程序员如何花 8 个月时间获得特斯拉实习机会?
  13. ffmpeg之YUV420P转RGB24
  14. 矩阵连乘积问题--动态规划
  15. html5超萌哈士奇,哈士奇,是一种让人又爱又恨,又拥有自己独特风格的雪橇犬...
  16. 服务器raid状态rebuild,RAID 1 误操作rebuild,如何恢复数据?
  17. uni-app图片上传(位置固定)
  18. 送给女朋友的3D立体动态相册的实现代码
  19. Vista如何安装迅盘驱动以及如何开启迅盘
  20. Abaqus基于JH2本构的脆性材料冲击仿真及SHPB模拟

热门文章

  1. 98后小哥出的校招黑名单火了!标星4K,校招生有福了!
  2. 数值计算方法 | C语言实现几个数值计算方法(实验报告版)
  3. 4.HTML设计超链接的网页
  4. 大带宽高防高防服务器
  5. soi cmos技术及其应用_智能视频监控技术及其在安防领域的应用
  6. Python 实现快排
  7. PHPStorm+PHPStudy的PHP开发环境配置
  8. 【项目】offline danmu -- 爬取bilibili弹幕并分析弹幕用户ID
  9. (01)ORB-SLAM2源码无死角解析-(01) 环境搭建,demo运行,ROS一键安装_清除各种疑难杂症
  10. Nacos名字服务(Naming Service)