【问题标题】:How to fix a sudden CDbException on Yii Framework after reboot (Active Record queries not working)如何在重启后修复 Yii 框架上的突然 CDbException(Active Record 查询不起作用)
【发布时间】:2012-04-24 16:34:23
【问题描述】:


我目前正在按照“使用 Yii 进行敏捷 Web 应用程序开发” 一书的步骤进行操作,到目前为止,我已经在第 8 章完成了所有工作。但是现在,在我关闭并打开我的笔记本电脑(升级了我笔记本电脑的 RAM),除了 Active Record 找不到数据库表之外,一切似乎都正常工作,不仅在这个 web 应用程序中,而且还尝试了我有旧的功能性和非常简单的演示,当模型类(从 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_'
参数,这是本书在其 web 应用程序中使用的参数(尽管它从不建议这样做,使用 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"...

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

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

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

【问题讨论】:

  • 您的模型的 tableName 方法返回什么?是实际的表名,还是别的什么?

标签: sql yii


【解决方案1】:

我遇到了同样的问题,在我的开发环境 (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';
}

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

【讨论】:

  • 感谢您的回答,虽然我的问题有点不同。在您的情况下,函数tableName(),如果我没记错的话,必须始终准确地返回您的模型的相关表的名称,因为它在您的数据库中,而不是类本身的名称。就我的问题而言,这只是与我的系统设置相关的权限问题,即使我不知道我之前做错了什么,我还是通过更改 /var/folders/ 文件夹的权限解决了这个问题。你可以看看我对自己问题的回答。
【解决方案2】:

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

sudo chmod -R 777 /var/folders

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多