ThinkPHP学习笔记(六):关于命名范围的使用

来源:互联网 发布:那些年网络歌曲动漫 编辑:程序博客网 时间:2024/05/21 04:16

要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连贯操作方法的使用。
_scope属性是一个数组,每个数组项表示定义一个命名范围,命名范围的定义格式为:
'命名范围标识名'=>array('属性1'=>'值1','属性2'=>'值2'...)
命名范围标识名:可以是任意的字符串,用于标识当前定义的命名范围。
命名范围支持的属性包括:
where 查询条件field 查询字段order 结果排序table 查询表名limit 结果限制page 结果分页having having查询group group查询lock 查询锁定distinct 唯一查询cache 查询缓存

// 在 Lib/Model/UserModel.class.php 里定义:class UserModel extends CommonModel {    protected $_scope = array(        'jige' => array(            'where' => array(                'score' => array('egt', 60),                ),            'order' => 'id asc',            'limit' => 10            ),        'ziduan' => array(            'field' => 'nick_name, score',            'limit' => 5            ),        );}
// 在控制器里:$user = D('User');$data = $user->scope('jige')->select();//得到的查询条件是:SELECT * FROM `mk_user` WHERE ( `score` >= 60 ) ORDER BY id asc LIMIT 10

如果两个字段里都有设置相同的limit,后面一个会覆盖前面的

$data = $user->scope('jige,ziduan')->select();//得到的查询条件是:SELECT `nick_name`,`score` FROM `mk_user` WHERE ( `score` >= 60 ) ORDER BY id asc LIMIT 5

使用命名范围的同时, 也可以使用 where 语句

$data = $user->scope('jige,ziduan')->where('id < 50')->select();//得到的查询条件是:SELECT `nick_name`,`score` FROM `mk_user` WHERE ( `score` >= 60 ) AND ( id < 50 ) ORDER BY id asc LIMIT 5
0 0
原创粉丝点击