2012-11-07 14 views
6

Tôi đang sử dụng SQL tùy chỉnh để nối hai bảng, áp dụng một số logic nghiệp vụ cho các ngày, sau đó sử dụng các kết quả để hydrate một đối tượng propel (bộ sưu tập). Dưới đây là mã của tôi:Làm thế nào tôi có thể nhận thêm cột khi hydrating Propel objects với SQL tùy chỉnh?

$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 ... 
} 

Câu hỏi này do thỏa thuận hợp một số bộ phận, bởi vì có thể có một cách hoàn toàn tốt hơn để làm điều này - vì vậy xin vui lòng đóng góp ý kiến ​​khác hơn là chỉ giải đáp thắc mắc cụ thể của tôi:

  • Tôi đang sử dụng HAVING thay vì WHERE để tôi có thể sử dụng cột bí danh dueDate, mà tôi muốn sử dụng như một phần của séc và đặt hàng, cũng như trả lại nó như một phần của bộ kết quả để sử dụng sau này. Có cách nào để lấy giá trị này nhưng vẫn hydrate đối tượng propel? Khi tôi sử dụng fetch() hoặc các phương pháp PDO khác trên $stmt Tôi không còn có thể sử dụng điều này với cuộc gọi đến format().
  • Ngoài ra, có cách nào tốt hơn để làm điều này với Propel thuần túy không?

Trả lời

1

Bạn nên thêm một số bước. Đây là quá trình hợp lý:

    gọi
  1. SQL mà không bao gồm các cột thêm
  2. Hydrate đối tượng (s)
  3. SQL gọi các giá trị lợi nhuận cho các cột thêm
  4. Cập nhật đối tượng ngậm nước (s) với các giá trị cột bổ sung

Hy vọng điều này sẽ hữu ích. Chúc mừng.