2012-11-07 7 views
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オブジェクトを水和させる方法はありますか? $stmtfetch()または他のPDOメソッドを使用すると、format()の呼び出しでこれを使用できなくなります。
  • 純粋なPropelでこれを行うより良い方法がありますか?

答えて

1

いくつかの手順を追加する必要があります。

    余分な列が含まれていません
  1. SQL呼び出し
  2. 水和物オブジェクト(複数可)
  3. SQL余分な列
  4. 更新水和オブジェクトの戻り値を呼び出します(これは論理的なプロセスであり、 s)に余分の列の値を指定してください。

乾杯。

関連する問題