あなたがやろうとしていることを私が理解していて、私がそうするかどうかわからない場合。フォームを介したタイプとステータスの設定は、特定の状況で機能します。
最初に行うことは、テーブルにを追加して、現在のステータスを追跡できるようにすることですroom_status_id
。room
あなたのコンテキストはホテルまたはコンベンションセンタータイプの設定だと思います。このコンテキストでは、部屋のタイプは頻繁に変更されない可能性がありますが、ステータスは1日に数回変更される可能性があります。
したがって、管理コンソールのようにフォームを作成して部屋をセットアップし、初期のタイプとステータスを指定すると、ときどき変更するのが適切です。日常の操作では、さまざまなコントローラーアクションに自動ステータス変更を含めることができます。
たとえば、いくつかの疑似コード:
initiate room (admin): set room_type, set room_status;
reserve room: set room_status: reserved;
room in use: set room_status: in use;
room vacant: if (room != clean) {
set room_status: not clean
} else {
set room_status: clean
}
room being remodeled(admin)
if (room_type === change) {
set type: new room_type;
} else {
don't change room_type;
}
if (inRemodel === true) {
set room_status: unavailable;
}
この情報が頻繁に変更または操作される可能性は低いため、room_typeおよびroom_statusのコントローラーはおそらく必要ありません。
room_typeとroom_statusは、最初に設定され、その後値が変更されることはめったにない種類のデータのようです。その場合、モデルはこれらの値にアクセスし、必要に応じてそれらを渡す場所になります。
私はその点を完全に見逃していないことを願っています。
[編集]コメントにroom_typeとroom_statusの名前を表示する方法を尋ねました。結合を使用します:
//make a dbTable model for each table
//in your Application_Model_DbTable_Room, built a method similar to this to join the tables
public function fetchRoomData() {
//setIntegrityCheck to false to allow joins
$select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
->setIntegrityCheck(FALSE);
//performs join aliasing table room_type to t
$select->join(array('t' => 'room_type'), 't.room_type_id = room.room_type_id');
////performs join aliasing table room_status to s
$select->join(array('s' => 'room_status'), 's.room_status_id = room.room_status_id');
$result = $this->fetchAll($select);
return $result;
}
[編集]dbテーブルに基づいて選択されたフォーム要素を表示するには:
$bidlocation = new Zend_Form_Element_Select('room_type');
$bidlocation->setLabel('Room Type: ');
$b = new Application_Model_DbTable_RoomType();
$a = $b->fetchAll();
foreach ($a as $c) {
//applies caps to first letter of each word
$d = ucwords($c['room_type_name']);
$bidlocation->addMultiOption($c['room_type_id'], $d);
}