繁体   English   中英

推进伪列排序

[英]propel pseudo column sorting

基本上,我想创建一个伪列进行排序。 这是我的SQL查询

SELECT I.*, ((I.width*175)/I.height) as relativeWidth
FROM Image I
order by relativeWidth asc

我如何在不编写直接SQL的情况下进行操作? 我不想做一个视图并查询它。

您是否在使用Criteria(创建where子句的旧方法)? 如果是这样,您可以简单地执行以下操作:

$c = new Criteria();
$c->addSelectColumn(
    '((' . IPeer::WIDTH . '*175)/' . IPeer::HEIGHT . ') AS relativeWidth'
);
$c->addAscendingOrderByColumn('relativeWidth');
$rows = IPeer::doSelect($c);

您还需要在行类(I)中重写hydrate()方法,以捕获多余的列(未经测试):

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;
}

最后,您当然需要新方法的吸气剂,但这很容易。

如果您使用的是Query系统,则可能有一种类似的方法,尽管我对此不太熟悉。

(编辑:添加了返回值以确保正确性。)

这样的要求在Propel 1.5+版本中是可能的。 强烈建议进行升级,因为它完全向后兼容,并具有许多新功能和修补程序。

您只需要了解新的ActiveQuery api即可,而不是遵循良好的条件。 这样,您可以使用“虚拟列”解决问题,只需在这里查看: http : //www.propelorm.org/reference/model-criteria.html#adding_columns

如果您在symfony中使用Propel,只需从https://github.com/propelorm/sfPropelORMPlugin安装sfPropelORMPlugin并按照README文件运行即可。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM