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í danhdueDate
, 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ụngfetch()
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 đếnformat()
. - 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?