我正在尝试将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;属性给出了未定义属性的错误。活动记录发生了什么
答案 0 :(得分:1)
在Oracle中的标识符周围加上双引号会导致Oracle将标识符视为区分大小写,而不是使用不区分大小写的默认值。
我刚刚在Oracle 11g实例上尝试过这个版本,并且该版本是正确的。
您应该在数据库中确认表名的大小写,然后修改tableName()
的返回值以匹配。