TP数据库表大写命名的一些问题

发表于:2014-6-11 11:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:路飞爱哭    来源:51Testing软件测试网采编

  在使用thinkphp时,如果数据库表命名有大写,会被转换成小写加下划线(可以使用$model->_sql())来查看实际执行的sql是什么
  这个问题,看了一下源代码,在 Thinkphp/Common/common.php里面,这个函数会将数据表(或视图)的大写字母转换为下划线+小写:
1 function parse_name($name, $type=0) {
2     if ($type) {
3         return ucfirst(preg_replace("/_([a-zA-Z])/e", "strtoupper('\\1')", $name));
4     } else {
5         return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
6         //<feixiang 2013年7月6日 这里会将数据库表名里的大写转换为 _小写,这里不转换,在Model.class.php还将表转换成了小写,需要改一下 >
7         //echo $name ;
8         //return $name;
9     }
10 }
  另外,在 Thinkphp/Core/Model.class.php里面,会将整个表名转换成小写:
1     public function getTableName() {
2         if(empty($this->trueTableName)) {
3             $tableName  = !empty($this->tablePrefix) ? $this->tablePrefix : '';
4             if(!empty($this->tableName)) {
5                 $tableName .= $this->tableName;
6             }else{
7                 $tableName .= parse_name($this->name);
8             }
9             //<feixiang 这里会将表名转换成小写,我们这里不转换>
10             $this->trueTableName    =   strtolower($tableName);
11             //$this->trueTableName    =   $tableName;
12         }
13         return (!empty($this->dbName)?$this->dbName.'.':'').$this->trueTableName;
14     }
  这样有好处——规范。
  但是在我们的开发中,有大写的数据表,所以改了一下(注释的那些)...
  或者可以在模型定义里面加上:
  protected $trueTableName = 'myTableName';
  来覆盖$this->trueTableName
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号