2014-02-26 67 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'); 

並沒有解決我的問題。我希望有人有更好的解決方案。