Допустим, у меня есть класс записей, который часто запрашивают с помощью двуязычных столбцов, которые являются агрегатными значениями MySQL:
$results = Doctrine_Core::getTable('MyRecord')->creatQuery('m')
->select('m.*, AVG(m.rating) as avg_rating, SUM(m.id) as nb_related')
->innerJoin('m.AnotherRecords a')
->where('m.id = ?')
->fetchOne();
Теперь давайте скажем, что я хочу, чтобы метод этой записи проверял, существуют ли столбцы агрегатов изкогда запрашивается запись, а если нет, то я хочу выполнить отдельный запрос, чтобы получить следующие значения:
// this doesnt actually work because of filterSet and filterGet
// but its general idea
public function getAverageRating($wtihNbRelated = false)
{
if(!isset($this->avg_rating) || ($withNbRelated && !isset($this->nb_related))
{
$rating = $this->getTable()->getAverageRating($this, $withNbRelated);
$this->avg_rating = $rating['avg_rating'];
if($withNbRealted)
{
$this->nb_related = $rating['nb_related'];
}
}
return $withNbRelated
? array('avg_rating' => $this->avg_rating, 'nb_related' => $this->nb_related)
: array('avg_rating' => $this->avg_rating);
}
Есть ли простой способ (т. е. не создавать собственный гидратор), чтобы сделатьэто?