Zend_Db_Table_Abstract и область действия по умолчанию

Есть ли способ добавить область по умолчанию в модель на основе Zend_Db_Table_Abstract.

Я хочу иметь возможность запрашивать модель с некоторыми условиями, принятыми по умолчанию.

e.g.

  • удалено = ложь
  • название заказа по возрастанию

person Community    schedule 23.09.2009    source источник


Ответы (1)


Вы можете переопределить метод Zend_Db_Table_Abstract:: _fetch() и изменить сгенерированный Zend_Db_Table_Select перед извлечением строк из адаптера базы данных. Насколько я знаю, все fetch*-методы и find() в Zend_Db_Table_Abstract сводятся к этому общему методу извлечения строк (кроме Zend_Db_Table_Abstract::fetchNew() естественно), поэтому ваш измененный код будет вызываться каждый раз, когда строки извлекаются из базы данных.

/**
 * Support method for fetching rows.
 *
 * @param  Zend_Db_Table_Select $select  query options.
 * @return array An array containing the row results in FETCH_ASSOC mode.
 */
protected function _fetch(Zend_Db_Table_Select $select)
{
    $select->where('deleted = false')->order('name asc');
    return parent:: _fetch($select);
}
person Stefan Gehrig    schedule 23.09.2009
comment
Я читал это ранее здесь, но, похоже, не могу заставить его работать: S zendframeworkinaction.com/2008/01/30/ очень странно - person ; 23.09.2009
comment
Что значит не работает? Вы получаете сообщения об ошибках или неправильные результаты или вообще ничего не получаете? Вы пытались отладить то, что происходит? - person Stefan Gehrig; 23.09.2009
comment
Попробуйте добавить var_dump($select-›__toString()) в метод выше — непосредственно перед вызовом родительского метода и посмотрите, как выглядит сгенерированная строка SQL. - person Stefan Gehrig; 23.09.2009
comment
var_dump показывает, что он помещает область в sql... но вызывает сбой вызовов findDependentRowset. - person ; 23.09.2009
comment
Вы получаете сообщение об ошибке при вызове findDependentRowset()? - person Stefan Gehrig; 23.09.2009
comment
Область действия отлично работает при непосредственном запросе модели. Но когда я пытаюсь получить доступ к модели через findDependentRowset(), ни одна из областей, которые я установил в модели, не используется. Возможно, findDependentRowset() должен использовать другое действие выборки? - person ; 23.09.2009
comment
Странно, что он использует Zend_Db_Table_Abstract::_fetch(), поэтому он не должен сбрасывать запрос, попробуйте добавить несколько var_dumps непосредственно в метод в классе Zend, чтобы увидеть, где он теряет значение. - person Chris; 24.09.2009
comment
Я решил проблему. Прицел работал корректно! Я идиот, и у меня был столбец с именем TIMESTAMP, поэтому вместо упорядочения по TIMESTAMP мне пришлось упорядочивать по TableName.TIMESTAMP. - person ; 22.10.2009