Используете ли вы Критерии (старый способ создания предложения where)?Если это так, вы можете просто сделать:
$c = new Criteria();
$c->addSelectColumn(
'((' . IPeer::WIDTH . '*175)/' . IPeer::HEIGHT . ') AS relativeWidth'
);
$c->addAscendingOrderByColumn('relativeWidth');
$rows = IPeer::doSelect($c);
Вам также нужно переопределить метод hydrate () в вашем классе строк (I), чтобы захватить дополнительный столбец (непроверенный):
public function hydrate($row, $startcol = 0, $rehydrate = false)
{
$startcol = parent::hydrate($row, $startcol, false);
$this->relativeWidth = ($row[$startcol] !== null) ? (float) $row[$startcol] : null;
$this->resetModified();
$this->setNew(false);
if ($rehydrate) {
$this->ensureConsistency();
}
return $startcol + 1;
}
Наконец, конечно, вам понадобится геттер для нового значения, но это просто.
Если вы используете систему запросов, возможно, есть аналогичный способ сделать это, хотя я меньшезнакомы с ним.
(Правка: добавлено возвращаемое значение для корректности.)