Php Zend框架->;数据库表字段前缀,如users.us\u name

Php Zend框架->;数据库表字段前缀,如users.us\u name,php,zend-framework,zend-db,Php,Zend Framework,Zend Db,我处理的数据库包含许多表,有许多字段前缀(每个表的前两个字母),所以当我有users表时,我不能使用“name”属性($user->name),但我可以使用:$user->us\u name 我有一种方法可以简化事情并为表中的每个字段设置automagic前缀?您必须扩展Zend\u Db\u table\u Row才能实现这一点。幸运的是,ZF包含了一个专门用于此目的的\u transformColumn()方法。但我已经超越了自己。首先,在课堂上摆好桌子。这假设您的数据库有一个名为“foo


我处理的数据库包含许多表,有许多字段前缀(每个表的前两个字母),所以当我有users表时,我不能使用“name”属性($user->name),但我可以使用:$user->us\u name



我有一种方法可以简化事情并为表中的每个字段设置automagic前缀?

您必须扩展
Zend\u Db\u table\u Row
才能实现这一点。幸运的是,ZF包含了一个专门用于此目的的
\u transformColumn()
方法。但我已经超越了自己。首先,在课堂上摆好桌子。这假设您的数据库有一个名为“foo_mytable”的表:

接下来,创建自定义行类:

class My_Db_Table_Row extends Zend_Db_Table_Row {
    protected function _transformColumn($columnName) {
        $columnName = parent::_transformColumn($columnName);
        $prefix = 'us_';
        return $prefix . $columnName;
    }
}
现在,您可以这样做(为了简单起见,本例忽略了MVC设计理念):


假设您的表有一个名为“us_name”的列,这应该可以工作。我自己测试过。请注意,在自定义表行中,可能需要从配置文件中获取表前缀。如果您已将其存储在注册表中,则可以替换
$prefix='us_u2;'带有
$prefix=Zend_注册表::get('tablePrefix')

我不知道_transformColumn()。我要跳到@curtisdf的例子上。
我认为您应该使用以下内容覆盖(未测试):

使用这种方法,您不需要存储前缀/表名,因为它们是通过友好方式检索的

class My_Db_Table_Row extends Zend_Db_Table_Row {
    protected function _transformColumn($columnName) {
        $columnName = parent::_transformColumn($columnName);
        $prefix = 'us_';
        return $prefix . $columnName;
    }
}
$table = new MyTable();
$records = $table->fetchAll();
foreach ($records as $record) {
    echo $record->name;
}
protected function _transformColumn($columnName)
{
    $tblName = $this->_table->info(Zend_Db_Table::NAME);
    $prefix  = substr($tblName, 0, 2);

    return $prefix . '_' . parent::_transformColumn($columnName);
}