ThinkPHP:模子三大利器之一(搜索器)【ThinkPHP教程】,ThinkPHP,模型,搜索器
作者:搜搜PHP网发布时间:2019-12-17分类:ThinkPHP浏览:67

[√新技能] 搜刮器——统一管理你的搜刮代码
模子搜刮器是自模子猎取器和修改器功用以后的第三个统一管理的利器,重要用于封装字段(或许搜刮标识)的查询前提表达式,一个搜刮器对应一个特别的要领(该要领必需是public范例),要领定名范例为:searchFieldNameAttr(FieldName为数据表字段的驼峰转换),搜刮器仅在挪用withSearch要领的时刻触发。
搜刮器的运用场景包含:
·限定和范例表单的搜刮前提;
·预定义查询前提简化查询。
比方,我们须要给User模子定义name字段和时候字段的搜刮器,能够运用:
<?php namespace app\index\model; use think\Model; class User extends Model { public function searchNameAttr($query, $value, $data) { $query->where('name','like', $value . '%'); } public function searchCreateTimeAttr($query, $value, $data) { $query->whereBetweenTime('create_time', $value[0], $value[1]); } }
搜刮器要领的参数有三个,第一个是查询对象,第二个是当前搜刮标识的值,第三个是当前一切的搜刮数据(可选)。
然后,我们能够运用下面的查询
User::withSearch(['name', 'create_time'], [ 'name'=>'think', 'create_time'=>['2018-8-1','2018-8-5'], 'status'=>1 ]) ->select();
终究生成的SQL语句类似于
SELECT * FROM `think_user` WHERE `name` LIKE 'think%' AND `create_time` BETWEEN '2018-08-01 00:00:00' AND '2018-08-05 00:00:00'
能够看到查询前提中并没有status字段的数据,因而能够很好的防止表单的不法查询前提传入,在这个示例中仅能运用name和create_time前提举行查询。
事实上,除了在搜刮器中运用查询表达式外,还能够运用别的的任何查询组织器以及链式操纵。
比方,你须要经由过程表单定义的排序字段举行搜刮效果的排序,能够运用
<?php namespace app\index\model; use think\Model; class User extends Model { public function searchNameAttr($query, $value, $data) { $query->where('name','like', $value . '%'); if (isset($data['sort'])) { $query->order($data['sort']); } } public function searchCreateTimeAttr($query, $value, $data) { $query->whereBetweenTime('create_time', $value[0], $value[1]); } }
然后,我们能够运用下面的查询
User::withSearch(['name','create_time', 'status'], [ 'name'=>'think', 'create_time'=>['2018-8-1','2018-8-5'], 'status'=>1, 'sort'=>['status'=>'desc'], ]) ->select();
终究查询的SQL多是
SELECT * FROM `think_user` WHERE `name` LIKE 'think%' AND `create_time` BETWEEN '2018-08-01 00:00:00' AND '2018-08-05 00:00:00' ORDER BY `status` DESC
你还能够给搜刮器定义字段别号,比方:
User::withSearch(['name' => 'nickname','create_time', 'status'], [ 'nickname'=>'think', 'create_time'=>['2018-8-1','2018-8-5'], 'status'=>1, 'sort'=>['status'=>'desc'], ]) ->select();
搜刮的数据运用的是nickname字段标识,但我们依然运用的是name字段标识的搜刮器(也就是searchNameAttr要领)。
搜刮器通常会和查询局限举行比较,搜刮器不管定义了若干,只须要一次挪用,查询局限假如须要组合查询的时刻就须要屡次挪用。
假如你运用的是Db查询要领,依然能够运用搜刮器功用,只是搜刮器要领定义须要改成闭包体式格局,以下:
User::withSearch(['name' => function($query,$value,$data){ $query->where('name','like', $value . '%'); }, 'create_time'=>function($query,$value,$data){ $query->whereBetweenTime('create_time', $value[0], $value[1]); }], [ 'name'=>'think', 'create_time'=>['2018-8-1','2018-8-5'], 'status'=>1 ]) ->select();
ki4网,有大批免费的ThinkPHP入门教程,迎接人人进修!
本文转自:https://blog.thinkki4.cn/783775
以上就是ThinkPHP:模子三大利器之一(搜刮器)的细致内容,更多请关注ki4网别的相干文章!
相关推荐
- ThinkPHP如何使用命令行 (cli) think调用_ThinkPHP教程,ThinkPHP,cli
- ThinkPHP中几种文件加载方式_ThinkPHP教程,ThinkPHP
- ThinkPHP扩展配置_ThinkPHP教程,ThinkPHP
- ThinkPHP利用PHPMailer发送邮件_ThinkPHP教程,ThinkPHP
- ThinkPHP where方法介绍_ThinkPHP教程,ThinkPHP
- 什么是ThinkPHP?简单入门介绍_ThinkPHP教程,ThinkPHP,php
- Thinkphp5模型添加数据的方法_ThinkPHP教程,thinkphp,模型,添加数据
- Thinkphp5模型更新数据的方法_ThinkPHP教程,thinkphp,模型,更新数据
- Thinkphp5模板继承和替换的问题案例_ThinkPHP教程,ThinkPHP,模板继承,替换
- ThinkPHP框架如何开发RPC接口_ThinkPHP教程,ThinkPHP,开发,RPC接口
- ThinkPHP排行
-
- 1说一说ThinkPHP6的空控制器_ThinkPHP教程,thinkphp
- 2windows10如何运行thinkphp6+swoole_ThinkPHP教程,thinkphp6,swoole
- 3解决TP6报错“当前访问路由未定义或不匹配”的方法_ThinkPHP教程,TP6
- 4thinkphp6开启session的方法_ThinkPHP教程,thinkphp6
- 5tp如何隐藏index.php_ThinkPHP教程,tp,index.php
- 6thinkphp中session跨域问题解决_ThinkPHP教程,thinkphp
- 7thinkphp5的Redis缓存配置_ThinkPHP教程,thinkphp
- 8TP6常用的脚手架命令_ThinkPHP教程,composer
- 9关于TP6多应用模式下获取不到当前控制器和方法名_ThinkPHP教程,php,tp6
- 最新文章
- 广而告之