Home >php教程 >php手册 >thinkphp模型过滤查询字段,表达式方法

thinkphp模型过滤查询字段,表达式方法

WBOY
WBOYOriginal
2016-06-13 10:52:15835browse

使用查询表达式
查询表达式的使用格式:
$map['字段名']  = array('表达式', '查询条件');
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
EQ:等于(=)
例如:$map['id']  = array('eq',100);
和下面的查询等效
$map['id']  = 100;
表示的查询条件就是 id = 100
NEQ: 不等于(!=)
例如:$map['id']  = array('neq',100);
表示的查询条件就是 id != 100
GT:大于(>)
例如:$map['id']  = array('gt',100);
表示的查询条件就是 id > 100
EGT:大于等于(>=)
例如:$map['id']  = array('egt',100);
表示的查询条件就是 id >= 100
LT:小于( 例如:$map['id']  = array('lt',100);
表示的查询条件就是 id ELT: 小于等于( 例如:$map['id']  = array('elt',100);
表示的查询条件就是 id LIKE: 同sql的LIKE
例如:$map['name'] = array('like','thinkphp%');
查询条件就变成 name like 'thinkphp%'
如果配置了DB_LIKE_FIELDS参数的话,某些字段也会自动进行模糊查询。例如设置了:
'DB_LIKE_FIELDS'=>'title|content'
的话,使用
$map['title'] = 'thinkphp';
查询条件就会变成 name like '%thinkphp%'
[NOT] BETWEEN:同sql的[not] between, 查询条件支持字符串或者数组,例如:
$map['id']  = array('between','1,8');
和下面的等效:
$map['id']  = array('between',array('1','8'));
查询条件就变成 id BETWEEN 1 AND 8
[NOT]  IN: 同sql的[not] in ,查询条件支持字符串或者数组,例如:
$map['id']  = array('not in','1,5,8');
和下面的等效:
$map['id']  = array('not in',array('1','5','8'));
查询条件就变成 id NOT IN (1,5, 8)
EXP:表达式,支持更复杂的查询情况
例如:
$map['id']  = array('in','1,3,8');
可以改成:
$map['id']  = array('exp',' IN (1,3,8) ');
exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。查询表达式不仅可用于查询条件,也可以用于数据更新,例如:
$User = M("User"); // 实例化User对象
// 要修改的数据对象属性赋值
$data['name'] = 'ThinkPHP';
$data['score'] = array('exp','score+1'); // 用户的积分加1
$User->where('id=5')->save($data); // 根据条件保存修改的数据

上面的过滤查询条件都可以写在_filter()函数里面,如:
    //过滤查询字段
    function _filter(&$map){
        $map['title'] = array('like',"%".$_POST['til']."%");
        $map['categoryId'] = array('eq',$_REQUEST['cid']);
       
    }

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn