如何在重启后修复Yii Framework上的突然CDbException(Active Record查询不起作用)

时间:2012-04-24 16:34:24

标签: sql yii


我目前正在按照“使用Yii进行敏捷Web应用程序开发”这本书的步骤进行操作,到目前为止,我已经成功完成了所有工作,并在第8章完成了。但是现在,之后我关闭并打开我的笔记本电脑(升级我的笔记本电脑的RAM),一切似乎都正常工作,除了 Active Record无法找到数据库表,不仅在这个webapp内,还试过我有过的旧功能和非常简单的演示,当Model类(从Yii扩展CActiveRecord类)时,它们都没有工作。

我正在使用XAMPP,在Mac OS X Lion 10.7.3(2.4GHz Intel Core 2 Duo,8GB RAM MacBook Pro)上使用MySQL数据库(效果很好)。 PHPUnit在重启之前也完美运行。

我已经多次在main.php文件中检查过我的'db'组件了 - 我想 - 一切都很好:

'db'=>array(
    'connectionString' => 'mysql:host=localhost;dbname=Customer',
    'emulatePrepare' => true,
    'username' => 'root',
    'password' => 'jasalo',
    'charset' => 'utf8',
),

还尝试添加

'tablePrefix' => 'tbl_'
参数,该参数是本书在其webapp中使用的参数(尽管它从不建议使用tablePrefix)。

另一方面,当我通过Yii执行简单查询时,它确实有效(我在一个简单的视图上尝试了这个,关于):

var_dump(Yii::app()->db->createCommand('select * from tbl_user')->queryAll());

这是我得到的结果的一部分(这是正确的):

array(3) { [0]=> array(9) { ["id"]=> string(1) "1" ["email"]=> string(22) "test1@notanaddress.com" ["username"]=> string(13) "Test_User_One" ["password"]=> string(32) "5a105e8b9d40e1329780d62ea2265d8a"...

我甚至尝试更改位于webapp的 index.php 文件中的Yii上的框架路径,认为可能是另一个。 有什么想法吗?

哦,这是我尝试使用CActiveRecord模型(类)时收到的错误消息:

CDbException

The table "tbl_user" for active record class "User" cannot be found in the database.

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,在我的开发环境(MAMP)中,我的模型中有以下内容:

public function tableName()
{
    return 'Nantivdb';
}

其中'Nantivdb'是扩展CActiveRecord的类的名称,我查询的表是'nantiv0'。

一旦投入生产,我不得不改变:

public function tableName()
{
    return 'nantiv0';
}

或者yii找不到表'nantiv0'。

因此,我将在/models/User.php中进行以下更改:

public function tableName()
{
    return 'tbl_user';
}

很抱歉没有更多解释来提供......

答案 1 :(得分:0)

我发现这是一个权限问题。我刚刚通过访问phpmyadmin找到了问题,登录试图查看表的结构,它说它没有访问/ var /文件夹的权限所以我只是将其权限更改为777(虽然有点不安全,但不是我的情况是一个问题,因为它在一个用户环境中):

sudo chmod -R 777 /var/folders