`
zccst
  • 浏览: 3292314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

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

一、单表的named scopes

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();
注:缺省空间只用在查询中,在插入或删除中被忽略。


二、多表关联的named scopes

$posts = Post::model()->published()->recently()->with('comments')->findAll();
其中别名comments是在../models/Post.php数据库规则中定义。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics