+ -
当前位置:首页 → 问答吧 → thinkphp查询数据库问题

thinkphp查询数据库问题

时间:2011-06-09

来源:互联网

我在开发项目的时候有个model中输入的表名是大写的,但是thinkphp给我全部转义成小写了,而且还在我的表明中加入了下划线,导致数据库查询失败。这个问题怎么解决?

    public function index()
    {
        $User = new Model("UserInfo");
        $data = $User->find(1);
        dump($data);
        
        //$this->display();
        $this->login();
    }
   

调试日志信息:

作者: hijoys   发布时间: 2011-06-09

5.3.2 模型命名
thinkphp.cn/Manual/81
当我们创建一个UserModel类的时候,其实已经遵循了系统的约定。ThinkPHP要求数据库的表名和模型类的命名遵循一定的规范,首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的数据表名称,并且首字母大写,然后加上模型类的后缀定义,例如:

UserModel 表示User数据对象,(假设数据库的前缀定义是 think_)其对应的数据表应该是

think_user

UserTypeModel 对应的数据表是 think_user_type  

如果你的规则和系统的约定不符合,那么需要设置Model类的tableName属性。

作者: gulize   发布时间: 2011-06-10



你说可以设置那个Model类的tableName属性,请问如何设置?

作者: hijoys   发布时间: 2011-06-10



问题解决了。

此文件在Z:\ThinkPHP\Lib\Think\Core\Model.class.php中

    public function getTableName()
    {
        if(empty($this->trueTableName)) {
            $tableName  = !empty($this->tablePrefix) ? $this->tablePrefix : '';
            if(!empty($this->tableName)) {
                $tableName .= $this->tableName;
            }else{
                //$tableName .= parse_name($this->name);
                $tableName .= trim($this->name);

            }
            $tableName .= !empty($this->tableSuffix) ? $this->tableSuffix : '';
            if(!empty($this->dbName))
                $tableName    =  $this->dbName.'.'.$tableName;
            //$this->trueTableName    =   strtolower($tableName);   //原来配置
            $this->trueTableName    =   trim($tableName);  //修改过的配置
        }
        return $this->trueTableName;
    }

作者: hijoys   发布时间: 2011-06-10

不知道修改过后会不会有问题

作者: hijoys   发布时间: 2011-06-10