Yii数据库操作——名字空间(named scopes)的三种用法

Yii数据库操作——名字空间(named scopes)的三种用法

[b]一、单表的named scopes[/b]

1,scopes一般用法
用不同的名字空间获取符合各种条件的结果集。常用于:
a,同一个事物不同状态下的结果集。
b,首页或侧边栏展示。例如,取最新的5篇帖子。
c,冒泡的形式展示一个结果值。例如,某个机房有多少单子。

(1)在../models/Post.php中配置

public function scopes(){
return array(
'published'=>array(
'condition'=>'status=1',
),
'recently'=>array(
'order'=>'create_time DESC',
'limit'=>'5',
),
);
}


(2)在../controllers/PostController.php等地方使用
名字空间只用在find中。相当于过滤filter。
(1) 只用在find方法的左边。
(2) 类级别。必须使用ClassName::model()。
例如,$posts = Post::model()->published()->recently()->findAll();


2,带参数的名字空间
定义一个在名字空间(scopes)中已经存在的方法名。

public function recently($limit = 5){
$this->getDbCriteria()->mergeWith(array(
'order'=>'create_time DESC',
'limit'=>$limit,
));
return $this;
}

$posts = Post::model()->published()->recently(3)->findAll();
如果不指定3,则默认返回5。


3,缺省空间
比如,解决多语言问题。

public function defaultScope(){
return array(
'condition'=>"language='". Yii::app()->language ."'",
);
}

$content = Content::model()->findAll();
注:缺省空间只用在查询中,在插入或删除中被忽略。


[b]二、多表关联的named scopes[/b]

$posts = Post::model()->published()->recently()->[color=red]with('comments')[/color]->findAll();
其中别名comments是在../models/Post.php数据库规则中定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值