6
私はカスタムSQLを使用して2つのテーブルを結合し、ビジネスロジックを日付に適用し、結果を使用してプロペラオブジェクト(コレクション)を水和します。Propelオブジェクトをカスタム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 ...
}
この質問は、いくつかの部分で提供されます:ここに私のコードです
WHERE
の代わりにHAVING
を使用していますので、私はチェックとオーダーの一部として使用するエイリアス化された列dueDate
を使用することができ、後で使用するために結果セットの一部として戻します。この値を取得する方法はありますか?それでもpropelオブジェクトを水和させる方法はありますか? $stmt
でfetch()
または他のPDOメソッドを使用すると、format()
の呼び出しでこれを使用できなくなります。