使用Oracle的Yii Active Record无法正常工作

时间:2014-09-18 08:02:29

标签: oracle oci yii2

我正在尝试将Yii活动记录与Oracle数据库一起使用,但似乎Active记录缺乏对Oracle数据库的支持,第一个问题是引用表名。考虑这个模型

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Tblleaves extends ActiveRecord
{
    public static function tableName()
    {
        return 'tblleaves';
    }
}

当我尝试使用

获取动作中的所有记录时
$leaves = Tblleaves::find()->all();

它引发了异常,消息&#39;表或视图不存在 (/tmp/pear/download/PDO_OCI-1.0/oci_statement.c:142) 正在执行的SQL是:SELECT * FROM&#34; tblleaves&#34;&#39;

如果我查询这样的

$connection = new \yii\db\Connection([
    'dsn' => 'oci:dbname=//10.0.0.200:1521/orcl',
    'username' => 'JISPBILCORBILLINGPRD501',
    'password' => 'JISPBILCORBILLINGPRD501',
]);
$connection->open();
$command = $connection->createCommand('SELECT * FROM tblleaves');
$posts = $command->queryAll();
echo '<pre>'; print_r($posts); exit;

它的工作原理很好。我后来评论了QueryBuilder的这一行

$tables = $this->quoteTableNames($tables, $params);

它也工作正常,但是然后ActiveRecord无法获得表的方案,所以$ leave-&gt;属性给出了未定义属性的错误。活动记录发生了什么

1 个答案:

答案 0 :(得分:1)

根据this SO answer

  

在Oracle中的标识符周围加上双引号会导致Oracle将标识符视为区分大小写,而不是使用不区分大小写的默认值。

我刚刚在Oracle 11g实例上尝试过这个版本,并且该版本是正确的。

您应该在数据库中确认表名的大小写,然后修改tableName()的返回值以匹配。