2010-06-03 2 views
2

Как создать Zend_Db_Table, который возвращает другой класс для каждой строки?row specific class

Пример UserTable имеет идентификатор, имя и тип Тип содержит имена классов (админ, клиент и т.д. ...)

Классы администратора, клиент все подклассы пользователя

Если я позвоню выборки Мне нужно получить объект admin или client в зависимости от соответствующего значения в db.

+0

Я нахожу этот вопрос интересным, но мне остается интересно, что это делает необходимым. Кажется, что модель должна абстрагировать ее, поэтому вам не нужно это делать. – Sonny

ответ

0
class Your_Db_Table_Row extends Zend_Db_Table_Row_Abstract 
{ 
} 

class Your_Db_Table extends Zend_Db_Table_Abstract 
{ 
    protected $_rowClass = "Your_Db_Table_Row"; 
} 

или

new Your_Db_Table(array("rowClass" => "Your_Db_Table_Row"); 

Так что, когда вы получаете набор строк из таблицы подкласса, строки, включенные в это будет ваш собственный класс.

Редактировать

Чтобы получить пользовательскую строку на основе значения, я бы сказал, расширить класс Zend_Db_Table_Rowset_Abstract вместо этого и переопределить этот метод:

getRow(int $position, [bool $seek = false]) 

Вам также необходимо переопределить current метод и, возможно, некоторые из других заданий SeekableIterator, которые фактически создают класс строк на основе свойства _rowClass. Возможно, вы сможете установить _rowClass до того, как current вызывается на основе типа строки ваших данных.

Вы можете создать экземпляр определенного класса в потоке и вернуть его на основе параметра типа.

Возможно, вы, возможно, просто используете композицию? Скажите, просто передайте данные новому классу, если это тип администратора или что-то еще?

+0

Это будет использовать класс «Your_Db_Table_row» для каждой строки, он должен отличаться от значения поля «type». – stimpie

+0

Очень верно; Я слишком быстро прочитал этот вопрос. Отредактировано с предложением. – typeoneerror