1

、、のような3つのデータベーステーブルがroomsありroom_typeますroom_status。これがテーブルの構造です

rooms

room_id, room_number, room_type_id, room_status_id

room_type

room_type_id, room_type_name, room_type_desc

room_status

room_status_id, room_status_name, room_status_desc

したがって、実際にはこのテーブルに基づいて、新しい部屋を追加するためのフォームを作成する必要があります。私はすでに部屋のコントローラーとモデルを作成しました。

私の考えは、部屋のテーブルに基づいてフォームを作成し、room_typeと部屋のステータス用に別の2つのコントローラーを作成することです。その後、room_typeとroom_statusからデータを取得し、それを部屋のフォームに渡します。ここで、このデータを使用してselect要素を作成できます。

どうすればより良い解決策を達成できるかアドバイスできますか。これが良い解決策かどうかはわかりません。

[編集]

`$ status = $ this-> createElement('select'、'status');

    $status->setLabel("Select a status:");

    $status->addMultiOption('Active', 'active');

    $status->addMultiOption('Suspended', 'suspended');

    $this->addElement($status);`

addMultiOptionisここで静的にわかるように、データベースから動的にするにはどうすればよいですか?私の考えを説明できたらいいのにと思いますか?

4

1 に答える 1

0

あなたがやろうとしていることを私が理解していて、私がそうするかどうかわからない場合。フォームを介したタイプとステータスの設定は、特定の状況で機能します。
最初に行うことは、テーブルにを追加して、現在のステータスを追跡できるようにすることですroom_status_idroom

あなたのコンテキストはホテルまたはコンベンションセンタータイプの設定だと思います。このコンテキストでは、部屋のタイプは頻繁に変更されない可能性がありますが、ステータスは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);  
        }
于 2012-04-22T10:55:45.047 に答える