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