just do it

Yii框架之使用技巧总结(part2)

写一个可以写在main.php中的Components并绑定行为,事件

class ExtWindow extends CApplicationComponent{

private $title = ‘title’;
public $oldtitle;
public function getTitle(){
return $this->title ? $this->title : ‘old title<br />’;
}

public function setTitle($title){
echo ‘==’.$this->oldtitle.’==’;
$this->oldtitle = $this->title;
$this->title = $title;
if($this->hasEventHandler(‘onTitleChange’)){
$event =new CEvent($this);
$this->raiseEvent(‘onTitleChange’, $event);
}

}
//必须有这么个方法,其和raiseEent中的事件一样,具体看代码
public function onTitleChange($event){

}

}

<?php
class Window extends CBehavior{
public function events(){
return array_merge(parent::events(),array(
‘onTitleChange’=>’titleChange’,
));
}

public function titleChange($event){
echo $event->sender->title;
echo ‘event TitleChange is handled in Behavior<br />’;
echo $this->owner->title;
}

public function titleOld(){
echo  ‘<br />old title is is  ‘.$this->owner->oldtitle;
}
}
main.php中的写法
‘ExtWin’=>array(
‘class’ => ‘ExtWindow’,
‘oldtitle’=>’我是旧的’,
‘behaviors’=>array(‘win’=>’application..behavior.Window’)

一对多,多对多的关联时最后的参数 together说明
如果为false,分开查多个语句
如果为true,强制生成一个语句
如果没有设置,分页页生成多个语句,不分页时生成一个语句
),
多对多时,查询时,中间表的名子叫 (关联名_关联名)

with选项的作用是eager loading
together的作用是 要不要形成一个语句

当是一个sql语句是记录会有重复,这时候分页分出现相同的记录,加上group=>true即可,

只要弄明白了,你生成的sql是一条还是多条sql就明白在多对多查询时的结果了

 

两个表不是用主键关联

‘user’ => array(self::BELONGS_TO, ‘OaskUser’, ”,’on’=>’name=userName’, ‘select’=>’TrueName’),

 

Yii CDbCriteria 常用方法

这是Yii CDbCriteria的一些笔记和常用用法:
    PHP代码

$criteria = new CDbCriteria;
$criteria->addCondition(“id=1”); //查询条件,即where id = 1
$criteria->addInCondition(‘id’, array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);
$criteria->addNotInCondition(‘id’, array(1,2,3,4,5));//与上面正好相法,是NOT IN
$criteria->addCondition(‘id=1′,’OR’);//这是OR条件,多个条件的时候,该条件是OR而非AND
$criteria->addSearchCondition(‘name’, ‘分类’);//搜索条件,其实代表了。。where name like ‘%分类%’
$criteria->addBetweenCondition(‘id’, 1, 4);//between 1 and 4

$criteria->compare(‘id’, 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,
//即如果第二个参数是数组就会调用addInCondition

$criteria->addCondition(“id = :id”);
$criteria->params[‘:id’]=1;

$criteria->select = ‘id,parentid,name’; //代表了要查询的字段,默认select=’*’;
$criteria->join = ‘xxx’; //连接表
$criteria->with = ‘xxx’; //调用relations
$criteria->limit = 10;    //取1条数据,如果小于0,则不作处理
$criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10
$criteria->order = ‘xxx DESC,XXX ASC’ ;//排序条件
$criteria->group = ‘group 条件’;
$criteria->having = ‘having 条件 ‘;
$criteria->distinct = FALSE; //是否唯一查询 

点赞