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

本文介绍了在ORM框架中如何使用命名范围功能来简化数据库查询操作。通过定义不同的命名范围,可以预先设置查询条件、排序方式等参数,方便在不同场景下复用这些配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要使用命名范围功能,主要涉及到模型类的_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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值