2014-02-26 34 views
0

我使用的是oracle-10g的php-activerecord。我遇到的问题与oracle列区分大小写。php-active记录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?我可以让它不区分大小写吗?我很感激帮助。谷歌今天失败了。

UPDATE:

我发现这个Yii框架网站:

“的原因似乎只是部分Oracle相关的Oracle不依赖于列名的大小写敏感的,只要它们没有在引号中指定,如果是这样,它需要精确的列名拼写,因此,似乎在ActiveRecord下面的Yii代码中必须有一个表名带有引号的部分,导致上述问题“。

^^因此,好像我需要破解phpactiverecord代码的某处,以避免引用列名。我猜phpactiverecord与甲骨文很差。性能也应该很差。

回答

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'); 

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