Zend Framework -> префикс поля таблицы базы данных, такой как users.us_name - PullRequest
0 голосов
/ 14 декабря 2010

Я имею дело с базой данных, содержащей много таблиц, со многими префиксами полей (две первые буквы каждой таблицы), поэтому, когда у меня есть таблица пользователей, я не могу использовать свойство «name» ($ user-> name), но я могу использовать: $user-> us_name.

Есть ли способ упростить вещи и установить автоматический префикс для каждого поля таблицы?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Вы должны были бы продлить 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';
}

Далее создайте свой собственный класс строк:

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

0 голосов
/ 11 июля 2011

Я не знал о _transformColumn ().Я собираюсь запрыгнуть на пример @curtisdf.
Я думаю, вам следует переопределить это ( не проверено ):

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

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

Используя это, вы выигралиНе нужно хранить префиксы / имена таблиц, так как они получены динамически.

...