我正在处理包含许多表的数据库,有许多字段前缀(每个表的两个首字母),所以当我有用户表时我不能使用“name”属性($ user-> name)但我可以使用: $用户> us_name
我有办法简化事情并为表格的每个字段设置自动前缀吗?
答案 0 :(得分:1)
您必须延长Zend_Db_Table_Row
才能完成此任务。幸运的是,ZF明确地为此目的提供了_transformColumn()
方法。但我领先于自己。首先,设置表类。这假设您的数据库有一个名为“foo_mytable”的表:
class MyTable extends Zend_Db_Table_Abstract {
protected $_name = 'foo_mytable';
protected $_rowClass = 'My_Db_Table_Row';
}
接下来,创建自定义Row类:
class My_Db_Table_Row extends Zend_Db_Table_Row {
protected function _transformColumn($columnName) {
$columnName = parent::_transformColumn($columnName);
$prefix = 'us_';
return $prefix . $columnName;
}
}
现在,您可以执行以下操作(为简单起见,此示例忽略了MVC设计理念):
$table = new MyTable();
$records = $table->fetchAll();
foreach ($records as $record) {
echo $record->name;
}
假设您的表有一个名为“us_name”的列,这应该可行。我亲自测试过。请注意,在自定义表行中,您可能希望从配置文件中获取表前缀。如果您已将其存储在注册表中,则可以将$prefix = 'us_';
替换为$prefix = Zend_Registry::get('tablePrefix');
。
答案 1 :(得分:0)
我不知道_transformColumn()。我要跳到@curtisdf的榜样上 我认为你应该用这个覆盖(未经测试):
protected function _transformColumn($columnName)
{
$tblName = $this->_table->info(Zend_Db_Table::NAME);
$prefix = substr($tblName, 0, 2);
return $prefix . '_' . parent::_transformColumn($columnName);
}
使用它,您不需要存储前缀/表名,因为它们是以dinamically方式检索的。