Yii框架:在数据库中找不到活动记录类的表

时间:2012-05-25 15:37:58

标签: postgresql yii

我希望hivemind有更多关于从Yii Framework处理这个错误的建议。我们设置的具体错误是:

  

CDbException 活动记录类“用户”的表“users”   无法在数据库中找到。

我正在使用来自SVN的Yii Framework 1.1.11-dev,尽管这只是尝试解决问题。我们运行的是最新的稳定版本1.1.10。

我们正尝试使用在我的开发环境中运行的代码部署到我们的实时服务器。我觉得问题几乎肯定是数据库配置的差异,但我不知道在哪里可以找到它。

我已经在这里搜索并搜索了Yii论坛,我发现这个问题已经列了几次。我们已经尝试过的建议修复包括

  • 从dsn
  • 中删除主机和端口
  • 包含和不包含表名的架构(即“users”和“public.users”)
  • 授予所有数据库[dbname]至postgres
  • 使用找到的代码here
  • 在数据库中的每个表上授予所有权限

环境如下:

  • DEV - OSX 10.7,PHP 5.3.10,PostgreSQL 9.0.3
  • PROD - FC15,PHP 5.3.10,PostgreSQL 9.0.7

错误表明表“用户”不存在,但很明显。

~$ psql -U postgres
psql (9.0.7)
Type "help" for help.

postgres=# \dt
                    List of relations
 Schema |             Name             | Type  |  Owner   
--------+------------------------------+-------+----------
  { ... removed for brevity ... }
 public | users                        | table | postgres

我们在protected / config / main.php中的配置

'db'=>array(
    'connectionString' => 'pgsql:dbname=lppsync',
    'emulatePrepare' => true,
    'username' => 'postgres',
    'password' => '',
),

用户模型的相关部分是

class Users extends CActiveRecord
{
    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Users the static model class
     */
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return 'users';
    }

3 个答案:

答案 0 :(得分:1)

事实证明,数据未导入指定的数据库。相反,它被导入到用户的数据库中。在这种情况下'postgres'。在这种情况下,修复是将数据重新导入到正确的位置,或更改Yii配置(我们的决定)。新的连接设置:

'db'=>array('connectionString' => 'pgsql:dbname=postgres', 'emulatePrepare' => true, 'username' => 'postgres','password' => '',)

答案 1 :(得分:1)

Yii caches db元数据,这可能就是问题所在?尝试清除元数据缓存或完全禁用缓存。

/ wwwroot/assets文件夹通常包含这些缓存文件。

还要检查设备(磁盘)上的空间是否用完。

来源:引用此问题的一条评论 - Yii Framework: The table for active record class cannot be found in the database

答案 2 :(得分:0)

我遇到了与MySQL类似的错误。在我的情况下,问题是我在授予用户权利时犯了一个错误。运行MySQL客户端我得到了一个正确的“命令被拒绝消息”,但从Yii的角度来看,它看起来似乎根本不存在。

解决方案是正确授予权利:

grant all on yiiapp.* to 'yii'@'localhost' identified by 'yii';