我正在使用自定义 SQL 来连接两个表,将一些业务逻辑应用于日期,然后使用结果来水化推进对象(集合)。这是我的代码:
$testtypes = TesttypeQuery::create()->find();
foreach ($testtypes as $testtype) {
/* work out what most recent schedule */
$con = \Propel::getConnection(SchedulePeer::DATABASE_NAME);
$sql = "SELECT `schedule`.*, (`schedule`.`last` + INTERVAL `duration`.`weeks` WEEK + INTERVAL `duration`.`months` MONTH + INTERVAL `duration`.`years` YEAR) AS `dueDate` FROM `schedule` LEFT JOIN `duration` ON `schedule`.`duration_id` = `duration`.`id` HAVING `schedule`.`testtype_id` = {$testtype->getId()} AND `dueDate` < NOW() ORDER BY `dueDate` ASC LIMIT 1";
$stmt = $con->prepare($sql);
$stmt->execute();
$formatter = new \PropelObjectFormatter();
$formatter->setClass(SchedulePeer::OM_CLASS);
$schedules = $formatter->format($stmt);
// more stuff here ...
}
这个问题分为几个部分,因为可能有更好的方法来做到这一点 - 所以除了回答我的具体问题之外,请随时提出建议:
- 我正在使用
HAVING
而不是,WHERE
以便我可以使用别名列dueDate
,我想将其用作检查和订单的一部分,并将其作为结果集的一部分返回以供以后使用。有没有办法获取这个值但仍然为推进对象补水?当我使用fetch()
或其他 PDO 方法时,$stmt
我不能再通过调用format()
. - 或者,有没有更好的方法来使用纯 Propel 做到这一点?