4

我希望 hivemind 对处理来自 Yii 框架的这个错误有更多的建议。特定于我们的设置的确切错误是:

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

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

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

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

  • 从 dsn 中删除主机和端口
  • 表名有无模式(即“users”和“public.users”)
  • 将数据库 [dbname] 上的所有内容授予 postgres
  • 使用此处找到的代码授予数据库中每个表的所有权限

环境如下:

  • 开发 - OSX 10.7、PHP 5.3.10、PostgreSQL 9.0.3
  • 产品 - 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';
    }
4

3 回答 3

1

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

'db'=>array('connectionString' => 'pgsql:dbname=postgres', 'emulatePrepare' => true, 'username' => 'postgres','password' => '',)
于 2012-06-13T08:39:15.583 回答
1

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

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

还要检查您的设备(磁盘)上的空间是否不足。

来源:引用此问题的评论之一 - Yii 框架:在数据库中找不到活动记录类的表

于 2014-07-14T14:42:58.913 回答
0

我在使用 MySQL 时遇到了类似的错误。就我而言,问题是我在授予用户权限时犯了一个错误。运行 MySQL 客户端我得到了一个正确的“命令被拒绝消息”,但从 Yii 的角度来看,这些表看起来根本不存在。

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

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

于 2012-11-09T23:26:34.770 回答