Yii数据库操作——名字空间(named scopes)的三种用法
[b]一、单表的named scopes[/b]
1,scopes一般用法
用不同的名字空间获取符合各种条件的结果集。常用于:
a,同一个事物不同状态下的结果集。
b,首页或侧边栏展示。例如,取最新的5篇帖子。
c,冒泡的形式展示一个结果值。例如,某个机房有多少单子。
(1)在../models/Post.php中配置
(2)在../controllers/PostController.php等地方使用
名字空间只用在find中。相当于过滤filter。
(1) 只用在find方法的左边。
(2) 类级别。必须使用ClassName::model()。
例如,$posts = Post::model()->published()->recently()->findAll();
2,带参数的名字空间
定义一个在名字空间(scopes)中已经存在的方法名。
$posts = Post::model()->published()->recently(3)->findAll();
如果不指定3,则默认返回5。
3,缺省空间
比如,解决多语言问题。
$content = Content::model()->findAll();
注:缺省空间只用在查询中,在插入或删除中被忽略。
[b]二、多表关联的named scopes[/b]
$posts = Post::model()->published()->recently()->[color=red]with('comments')[/color]->findAll();
其中别名comments是在../models/Post.php数据库规则中定义。
[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数据库规则中定义。