Zend framework -> prefijo de campo de tabla de base de datos como users.us_name

Me ocupo de la base de datos que contiene muchas tablas, con muchos prefijos de campo (dos primeras letras de cada tabla), así que cuando tengo una tabla de usuarios no puedo usar la propiedad “nombre” ($ usuario-> nombre) pero puedo usar: $ user-> us_name

¿Existe alguna manera de simplificar las cosas y establecer un prefijo automático para cada campo de una tabla?

Tendría que extender Zend_Db_Table_Row para lograr esto. Afortunadamente, ZF incluye un método _transformColumn() expresamente para este propósito. Pero me estoy adelantando a mí mismo. Primero, configure su clase de tabla. Esto supone que su base de datos tiene una tabla llamada “foo_mytable”:

 class MyTable extends Zend_Db_Table_Abstract { protected $_name = 'foo_mytable'; protected $_rowClass = 'My_Db_Table_Row'; } 

A continuación, crea tu clase de fila personalizada:

 class My_Db_Table_Row extends Zend_Db_Table_Row { protected function _transformColumn($columnName) { $columnName = parent::_transformColumn($columnName); $prefix = 'us_'; return $prefix . $columnName; } } 

Ahora puede hacer algo como esto (para simplificar, este ejemplo ignora los ideales de diseño de MVC):

 $table = new MyTable(); $records = $table->fetchAll(); foreach ($records as $record) { echo $record->name; } 

Suponiendo que su tabla tiene una columna llamada “us_name”, esto debería funcionar. Lo probé yo mismo. Tenga en cuenta que en la fila de la tabla personalizada, es posible que desee obtener el prefijo de la tabla de un archivo de configuración. Si lo tienes almacenado en tu registro, puedes reemplazar $prefix = 'us_'; con $prefix = Zend_Registry::get('tablePrefix'); .

No sabía sobre _transformColumn (). Voy a subir al ejemplo de @curtisdf.
Creo que debes anular con esto ( no probado ):

 protected function _transformColumn($columnName) { $tblName = $this->_table->info(Zend_Db_Table::NAME); $prefix = substr($tblName, 0, 2); return $prefix . '_' . parent::_transformColumn($columnName); } 

Con esto, no necesitará almacenar prefijos / nombres de tabla, ya que se recuperan dinámicamente.