ThinkPHP6.0 模型搜索器的使用

搜索器用于封装查询条件表达式,必须在模型中定义,只有使用模型操作数据时才能用搜索器。调用搜索器时使用的是数据表字段,可以不用定义搜索器方法,默认是 = 条件;如果不是数据表字段,必须定义对应的搜索器方法。

1. 调用搜索器


直接调用,默认查询条件是 =

  1. UserModel::withSearch(['name']['name' ='张三'])
  2. ->fetchSql(true)
  3. ->select();
  1. SELECT * FROM `user` WHERE `name` = '张三'

在模型中自定义搜索器方法,改变默认的 =

  1. <?php
  2. namespace app\index\model;
  3. class User extends \think\Model
  4. {
  5. public function searchNameAttr($query$value$data)
  6. {
  7. $query->where('name','like'$value '%');
  8. }
  9. }
  1. UserModel::withSearch(['name']['name' ='张三'])
  2. ->fetchSql(true)
  3. ->select();
  1. SELECT * FROM `user` WHERE `name` LIKE '张三%'

2. 搜索器方法的三个参数 searchNameAttr($query, $value, $data)


  • $query: think\db\Query 对象,用于链接操作
  • $value:withSearch() 第二个参数中当前搜索器字段对应的值
  • $data:withSearch() 第二个参数的值

可以直接在搜索器方法中打印参数,看看到底是个啥

站长源码网
  1. <?php
  2. namespace app\index\model;
  3. class User extends \think\Model
  4. {
  5. public function searchNameAttr($query$value$data)
  6. {
  7. halt($query$value$data);
  8. $query->where('name','like'$value '%');
  9. }
  10. }

posted @   很酷的站长  阅读(147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
在线工具网 在线工具箱 国学字典
点击右上角即可分享
微信分享提示