这个查询可以用Cdbcriteria (Yii框架)来写吗?


Can This Query Be Written With Cdbcriteria (Yii Framework)?

我有这个查询,我想用CDBCriteria写它。它可以用CDBCriteria编写吗?我不知道如何写这个查询与CDBcriteria在Yii框架。

谢谢你的时间。

    $opt='';
    if(!empty($roomtype))
    {
        $opt .= " AND id_room_type = ".$roomtype;
    }
    if(empty($children))
    {
        $opt .= " AND c.childrenFriendly = 1 ";
        $capacity = $adults + $children;
    }
    else {
        $capacity = $adults;
    }
    if(!empty($seaview))
    {
        $opt .= " AND c.seaview = 1 ";
    }
    if(!empty($smoking))
    {
        $opt .= " AND c.smoking = 1 ";
    }
    if(!empty($king_beds))
    {
        $opt .= " AND c.king_beds >= 1 ";
    }
    $qry = RoomType::model()->findAllBySql("
        SELECT (number_of_rooms) AS total, id_room_type, c.reservation, c.start, c.end, childrenFriendly, smoking, king_beds, capacity,
        SUM( number_of_rooms - IFNULL( c.reservation, 0 ) ) AS result
        FROM room_type
        LEFT JOIN (
          SELECT fk_room_type, COUNT( fk_room_type ) AS reservation, start ,end
          FROM room_type_reservation
          WHERE
          (end > '".$start->asSql()."' AND start < '".$end->asSql()."') OR
          (start < '".$end->asSql()."' AND end < '".$start->asSql()."')
          GROUP BY fk_room_type
        )c ON id_room_type = fk_room_type
        WHERE enabled = 1 AND capacity > ".$capacity." ". $opt ."
            GROUP BY id_room_type
            HAVING result > ".$number_of_rooms."
    ");
    return $qry;

当您阅读laser_wizard引用的文档时,要特别注意命名作用域。它们不是你在编程中想象的作用域。相反,它们是向where子句添加预定义表达式的一种方法。您可能还需要考虑在SQL中使用参数标记而不是变量名。这样做将有助于保护您免受SQL注入。