4

我正在使用 Propel ORM 编写查询

查询的形式为:

select * from some_table where some_table.created_at = (SELECT MAX(some_table.created_at) from some_table);

我做到了这一点:

 $c = new Criteria();
 $c->addSelectColumn('MAX('.self::CREATED_AT.')');

任何人都知道如何使用 Propel 来执行此操作,以节省我编写 RAW SQL 的时间吗?

4

4 回答 4

4

如果您只想知道如何添加自定义WHERE值,那么@prodigitalson 的解决方案应该可以工作,但我想知道为什么您首先要这样做,而不是:

$recs = SomeTableQuery::create()->orderByCreatedAt()->findOne();

...这将为您提供最新创建的记录。

于 2013-01-09T16:03:46.737 回答
1

尝试:

$c = new Criteria();
$c->add(SomeTable::CREATED_AT, '(SELECT MAX('.SomeTable::CREATED_AT.') FROM some_table)', Criteria::CUSTOM);
于 2009-12-08T19:13:06.027 回答
1

没有提到这种方式 - 所以这对我有用:

MyTable::create() 
->select('max_id') 
->addAsColumn('max_id', 'MAX(id)')
->findOne();

find() 返回一个对象的集合,所以使用 findOne()

addAsColumn() 只返回选定的列。

于 2017-08-04T10:32:10.413 回答
0

我无法让 ->withColumn('MAX(itemrevisionID)') 工作,所以解决方法是 ->orderByitemrevisionID('desc')

于 2015-03-17T18:21:14.230 回答