Yii使用技巧大汇总

时间:2021-05-25

本文汇总了Yii使用技巧。分享给大家供大家参考,具体如下:

一、从yii权威指中学到的

db组件 'schemaCachingDuration'=>3600, 为什么不起做用?

需要开缓存

如何在页面下边显示sql的查询时间

在log组件的routes中加入

array('class'=>'CProfileLogRoute','levels'=>'error, warning',)

同时在db组件中加入
复制代码 代码如下:'enableProfiling'=>true,
同时在这种情况下,可以用CDbConnection::getStats() 查看执行了多少个语句,用了多少时间

如何知道某一个程序段运行需要的时间

配置好CProfileLogRoute后,在需要测试的地方加上

Yii::beginProfile('blockID');//程序段Yii::endProfile('blockID');

'enableParamLogging'=>true,的作用是?

在日志的bind的参数后边跟数的值

如何在页面底部显示所有的db相关的日志

同上,配置log组件的routes中加入

array('class'=>'CWebLogRoute','levels'=>'trace, info, error, warning','categories' => 'system.db.*',//'showInFireBug' => true, 将在firebug中显示日志),

把日志记录到数据库

array('class'=>'CDbLogRoute','logTableName'=>'applog','connectionID'=>'db',),

运行时表applog会自动生成,如果不能生成,参照api自已建立

如何记录$_GET,$_SESSION等信息,在以上的routes中各个配置中加上
复制代码 代码如下:'filter'=>'CLogFilter',
log配置中的level设置不对,可能会得不到日志信息

另外level,category的值可以随便写,

只要在用yii::Log("","自定义level","自定义的category")时对应起来即可

如何记录更详细的信息,能记录stack,在入口文件中加上
复制代码 代码如下:define('YII_TRACE_LEVEL',10);数字越大,记当的越详细,结果如下
[15:31:57.226][trace][system.db.CDbCommand] Querying SQL: SHOW COLUMNS FROM `Bangdan` in E:APMServ5.2.6ponent{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){}}<?phpclass 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'),
表带talbeprefix是,多对关联,键的写法
复制代码 代码如下:'categories'=>array(self::MANY_MANY,'Category','{{post_category}}(post_id,category_id)'),

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章