我正在使用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来说很糟糕。表现也应该很差。
答案 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');
没有解决我的问题。我希望那里的人有更好的解决方案。