php-activerecord oracle区分大小写的列

时间:2014-02-26 17:15:55

标签: php oracle phpactiverecord

我正在使用php-activerecord和oracle 10g。我遇到的问题是oracle列是区分大小写的。

class Employee extends ActiveRecord\Model{

static $table_name = 'EMPLOYEE';
static $primary_key = 'PERSON_ID';

static $belongs_to = array(
    array('supervisor', 'class_name' => 'Employee','foreign_key'=>'SUPERVISOR_ID')
);

}

测试:

$employee = Employee::first();
echo $employee->supervisor_ID;     // Does not work - Oracle Columns are case sensitive
echo $employee->SUPERVISOR_ID;     // Prints ID

$employees = Employee::find('all', array('limit' => 10, 'include' => array('supervisor')));

错误:

Fatal error: Uncaught exception 'ActiveRecord\UndefinedPropertyException' with message 'Undefined property: Employee->supervisor_id

当我将外键定义为SUPERVISOR_ID时,为什么要查找小写的supervisor_id?我可以使它不区分大小写吗?我很感激帮助。谷歌今天失败了。

更新:

我在yii框架网站上找到了这个:

“原因似乎只是部分与Oracle相关。只要未在引号内指定,Oracle就不依赖于列名称的区分大小写。如果是这样,则需要提供精确的列名拼写。因此,似乎在ActiveRecord下面的Yii代码中的某个地方必须有一个用引号转义表名的部分,从而产生上述问题。“

^^所以看起来我需要在某处修改phpactiverecord代码,以便在列名称周围没有引号。我猜phpactiverecord对于oracle来说很糟糕。表现也应该很差。

1 个答案:

答案 0 :(得分:0)

如果其他人正在寻找答案,我会将其追踪到

Inflector.php

public function variablize($s) { 
       return str_replace(array('-','     '),array('_','_'),strtolower(trim($s))); 
}

当我将strolower改为strtoupper时,它起作用了。

添加小写属性

static $alias_attribute = array(
      'supervisor_id' => 'SUPERVISOR_ID',
      'last_nm' => 'LAST_NM');

没有解决我的问题。我希望那里的人有更好的解决方案。