私はこれらのテーブルを持っています:(不要な列は質問で切り捨てられました)
部屋: room_id | room_type_id | 部屋番号
room_types: room_type_id | 部屋タイプ | room_type_default_price
予約: reservation_id room_type | チェックイン | チェックアウト
ユーザーが目的の部屋タイプ、到着日、出発日を入力して利用可能な部屋を検索する場合、利用可能な部屋タイプをドロップダウンに入力する必要があります。ただし、2 つの問題があり、1 つは既知で、もう 1 つは不明です。以下のコードは、ページ (ビュー) の読み込み時に「配列から文字列への変換エラー」のみを返します。
既知の問題は、部屋タイプのドロップダウンに room_types テーブルのデータも含まれていることです。JS/jQuery の計算では、入力時に room_type 列と room_type_default_price 列を連結しました。したがって、生成された HTML は次のようになります。
ダブルルーム
したがって、ユーザー入力の $room_type は、たとえば "Double Room_20000" のようになりますが、元は列データが存在しません。ただし、部屋タイプの表では、room_type 列に「ダブルルーム」があります。これら 2 つの値を分離して、room_type_id を $room_type_id にするにはどうすればよいですか?
モデル:
function searchRoomType($room_type) {
$query = $this->db->query(" SELECT room_type_id FROM room_types WHERE room_type = '$room_type' LIMIT 1");
return $query->result();
//return $room_type_id;
//print_r ($room_type_id);
}
function searchRooms($room_type, $start_date, $end_date, $tmpRoomNumber = array()) {
$room_type_id = $this->searchRoomType($room_type);
$query = $this->db->query(
"SELECT a.room_number
FROM rooms a LEFT OUTER JOIN ( SELECT room_number
FROM reservations
WHERE checkin >= '$start_date'
AND checkout <= '$end_date'
) b
ON a.room_number = b.room_number
WHERE a.room_type_id = '$room_type_id'
AND a.housekeeping_status = 'Clean'
AND b.room_number is NULL
GROUP BY a.room_type_id
ORDER BY a.room_number ASC");
if($query->num_rows()>0) {
foreach($query->result_array() as $row) {
$tmpRoomNumber[$row['room_number']] = $row['room_number'];
}
}
return $tmpRoomNumber;
}