tp5.1模型的搜索器

43 篇文章 0 订阅

记录:

文档定义:搜索器的作用是用于封装字段(或者搜索标识)的查询条件表达式,一个搜索器对应一个特殊的方法(该方法必须是public类型)。

方法命名规范为:searchFieldNameAttr:

  • FieldName为数据表字段的驼峰转换。
  • 搜索器仅在调用withSearch方法的时候触发。
  • 若传入的查询字段未定义对应的搜索器,则自动过滤掉此字段的查询。
  • 搜索器通常会和查询范围进行比较,搜索器无论定义了多少,只需要一次调用,查询范围如果需要组合查询的时候就需要多次调用。

示例:

1,模型中定义搜索器,username字段和create_time字段

<?php

namespace app\common\model;

use think\Model;

class User extends Model
{
    //搜索器,username字段
    public function searchUsernameAttr($query,$value,$data){
        $query->where('username','like',$value.'%');
        //可对传入的sort字段进行排序
        if(isset($data['sort'])){
            $query->order($data['sort']);
        }
    }

    //搜索器,create_time字段
    public function searchCreateTimeAttr($query,$value,$data){
        $query->whereBetweenTime('create_time',$value[0],$value[1]);
    }


}

2,控制器中调用:

    public function search(){
        $result = model('user')->withSearch(['username','create_time'], [
            'username'		=>	'think',
            'create_time'	=>	['2017-1-1','2019-8-5'],
            'status'		=>	1,    //未定义status对应的获取器,查询时会自动去掉此参数
            'sort'          =>  ['create_time'=>'desc'],
        ])
        ->select()->toArray();
        echo '<pre>';print_r($result);
        echo '<pre>';print_r(model('user')->getLastSql());
    }

 查询的SQL语句:

SELECT * FROM `tp_user` WHERE  `username` LIKE '%'  AND `create_time` BETWEEN 1483200000 AND 1564934400 ORDER BY `create_time` DESC

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值