手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆

Yii框架中使用PDO时强制将表字段设为小写的BUG

首页 > PHP >

Yii框架的使用者越来越多,虽然大多数情况下都能够被使用的很正常,但偶尔还是有一些小问题,比如mysql对库名和表名区分大小写,但字段名不区分;这个问题就给Yii框架使用者带来很大的烦恼,特别是这个表还不是自己设计的,只是你拿来使用的,这个郁闷程度啊。
于是有人提醒我,应该这么用,在components中的db数组里加入:attributes=>array(PDO::ATTR_CASE,PDO::CASE_LOWER),以达到强制小写的目的,嗯,想法是好的,但是gii没法用了,gii直接报错,排查了半天,发现可能是CMysqlSchema这个类中的createColumn方法导致的错误,因为当你设置为列名小写后,这个方法中的一些判断却还是用的大写,于是很多变量就找不到了,没有办法继续下一步操作,于是我改了一下这个函数:

PHP代码
  1. /** 
  2.  * Creates a table column. 
  3.  * @param array $column column metadata 
  4.  * @return CDbColumnSchema normalized column metadata 
  5.  */  
  6.    protected function createColumn($column) {  
  7.        $column = array_change_key_case($column, CASE_LOWER);  
  8.        $c = new CMysqlColumnSchema;  
  9.        $c->name = $this->getDbConnection()->getColumnCase() == PDO::CASE_LOWER  
  10.                ? strtolower($column['field'])  
  11.                : ($this->getDbConnection()->getColumnCase() == PDO::CASE_UPPER ? strtoupper($column['field'])  
  12.                        : $column['field']);  
  13.        $c->rawName = $this->quoteColumnName($c->name);  
  14.        $c->allowNull = $column['null'] === 'YES';  
  15.        $c->isPrimaryKey = strpos($column['key'], 'PRI') !== false;  
  16.        $c->isForeignKey = false;  
  17.        $c->init($column['type'], $column['default']);  
  18.        $c->autoIncrement = strpos(strtolower($column['extra']), 'auto_increment') !== false;  
  19.        return $c;  
  20.    }  


当然上面的代码很粗燥,我也只是先临时解决这个问题,这么写之后,马上gii就恢复正常了。黑黑

顺便再说一个技巧:以前用gii的时候,对于生成model类都是一个个的输入一个个的生成,总想着应该可以批量生成,但一直不知道如何操作,直到昨天在解决上面的问题时,发现原来在gii里有这样一段代码:

PHP代码
  1. if($this->tableName[strlen($this->tableName)-1]==='*')  

我晶啊,原来那个表名可以写成*啊,这样就是自动生成整个数据库的model了,哎,以前居然一直没在意。




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: yii, model

« 上一篇 | 下一篇 »

只显示10条记录相关文章

Yii CDbCriteria的常用方法 (浏览: 44949, 评论: 5)
常用网站的反向代理页[2013-09-28] (浏览: 37363, 评论: 10)
将Yiiframework与JQuery easyUI整合使用 (浏览: 28200, 评论: 2)
Yii:relations update(self::STAT) (浏览: 24595, 评论: 0)
值得收藏的yii2的doc中关于db Query的说明 (浏览: 19493, 评论: 0)
Yii Demos 随想 (浏览: 19319, 评论: 3)
在Yii框架中使用Hprose或PHPRPC (浏览: 17742, 评论: 0)
Yiiframework(Yii框架)开发笔记:续四 (浏览: 17466, 评论: 3)
Yii 一行代码,为模块绑定子域名 (浏览: 16660, 评论: 0)
Yii ClinkPager 郁闷 (浏览: 15907, 评论: 2)

发表评论

评论内容 (必填):