【问题标题】:php-active record oracle case sensative columnsphp-activerecord oracle 区分大小写的列
【发布时间】:2014-03-29 16:53:12
【问题描述】:

我在 oracle 10g 中使用 php-activerecord。我遇到了 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?我可以让它不区分大小写吗?我很感激帮助。 Google 今天让我失望了。

更新:

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

“原因似乎只是部分与 Oracle 相关。Oracle 不依赖于列名的大小写敏感,只要它们没有在引号内指定。如果是这样,它会按照提供的准确列名拼写。因此,似乎在 ActiveRecord 下面的 Yii 代码中的某处必须有一部分用引号对表名进行转义,从而产生上述问题。”

^^ 所以看来我需要在某处破解 phpactiverecord 代码,以便在列名周围没有引号。我猜phpactiverecord对oracle很糟糕。性能应该也很差。

【问题讨论】:

    标签: php oracle phpactiverecord


    【解决方案1】:

    如果其他人正在寻找这个问题的答案,我会追踪到

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      相关资源
      最近更新 更多