0

このクエリがあり、 CDBCriteria で書きたいと思います。CDBCriteriaで書ける?Yii フレームワークで CDBcriteria を使用してこのクエリを作成する方法がわかりません。

御時間ありがとうございます。

    $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;
4

1 に答える 1

0

Laser_wizard が参照するドキュメントを読むときは、名前付きスコープに特に注意してください。それらは、プログラミングでスコープを考えるようなスコープではありません。代わりに、定義済みの式を where 句に追加する方法です。また、SQL で変数名の代わりにパラメーター マーカーを使用することを検討することもできます。そうすることで、SQL インジェクションから保護することができます。

于 2013-06-13T20:26:48.097 に答える