【问题标题】:Yii Framework: The table for active record class cannot be found in the databaseYii 框架:在数据库中找不到活动记录类的表
【发布时间】:2012-06-01 05:01:12
【问题描述】:

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

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

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

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

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

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

环境如下:

  • 开发 - OSX 10.7、PHP 5.3.10、PostgreSQL 9.0.3
  • 产品 - FC15、PHP 5.3.10、PostgreSQL 9.0.7

错误表明“users”表不存在,但很明显确实存在。

~$ 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';
    }

【问题讨论】:

  • 也许其他一些配置文件正在与主要的覆盖数据库设置合并?您可以检查控制器中某处echo Yii::app()->db->connectionString; echo Yii::app()->db->tablePrefix; ... 使用的实际数据库配置。另外,这不是表前缀的问题吗?
  • @galymzhan 感谢您的建议。 echo Yii::app()->db->connectionString; 显示了我们的配置文件中设置的内容,检查 tablePrefix 设置返回 null。我们没有设置表前缀,所以这应该可以工作。
  • Yii caches db 元数据,这可能是问题所在?尝试清除元数据缓存或完全禁用缓存。
  • 感谢清除元数据缓存(帽子提示@galymzhan)我发现真正的问题在于我们如何加载数据库。
  • 新用户8小时无法回答自己的问题,所以:数据导入全错了。数据被导入用户的数据库,而不是正确的 dbname。在这种情况下,'postgres'。从一开始,这都是我们的错误。需要明确的是,这种情况下的解决方法是将数据重新导入到正确的位置,或者更改 Yii 配置(我们的决定)。布拉格!我昨晚花了几个小时在这上面。新的连接设置:'db'=>array('connectionString' => 'pgsql:dbname=postgres', 'emulatePrepare' => true, 'username' => 'postgres','password' => '',)

标签: postgresql yii


【解决方案1】:

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

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

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

来源:引用其中一个 cmets 到这个问题 - Yii Framework: The table for active record class cannot be found in the database

【讨论】:

  • 我检查 /wwwroot/assets 里面没有缓存
  • 您是否检查过您的设备(磁盘)空间没有用完?
  • 是的,完全正确。我启用了 xdebug 并且我的空间用完了。谢谢
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-29
      • 2023-03-16
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      相关资源
      最近更新 更多