2011-05-01 58 views
0

當用戶添加一個事件時,我希望他們能夠選擇在該事件中正在播放的頻段。我已經有了我的Events表和我的Bands表,每個表都與HABTM模型關聯。CakePHP - 以同樣的形式保存多個HABTM數據w /下拉菜單

在我的「添加事件」頁面上,我有一個顯示樂隊的下拉列表,因此他們可以選擇一個。

echo $this->Form->input('Band', array('multiple'=>false, 'empty'=>true)); 

我想要一個「添加另一個樂隊」按鈕,點擊後,它會添加另一個下拉菜單。我想我已經知道該怎麼做動態現場添加的東西 - 但 - 甚至當我嘗試這是這樣的:(只是爲了看看,如果我能得到它的工作)

echo $this->Form->input('Band', array('multiple'=>false, 'empty'=>true)); 
echo $this->Form->input('Band', array('multiple'=>false, 'empty'=>true)); 
echo $this->Form->input('Band', array('multiple'=>false, 'empty'=>true)); 

它不保存3組bands_events HABTM表中的行 - 它只保存一個。當我嘗試編輯事件時,所有三個選擇下拉列表默認選擇一個以前選擇的樂隊,但不是全部(顯然它不能,因爲它沒有保存數據)。

有關如何讓多個下拉列表將多個樂隊添加到事件的任何想法?有太多的樂隊有複選框 - 我討厭多選框 - 對大多數用戶來說太難了。

任何幫助非常感謝。

回答

0

感謝泰勒領導我正確的方向。

我最終得到它使用下面的代碼。

控制器沒有什麼特別之處,通過使用普通的$ this-> Event-> save($ this-> data)將數據保存在HABTM連接表「bands_events」中......就像我不' t使用一系列的樂隊。

如果這段代碼中有些東西是關閉的,請告訴我 - 我不是Cake guru,我只是調整了Tylers代碼3個小時,直到我得到了語法..等工作。

$numBands = sizeof($this->data['Band']); 
    if($numBands) { 
     for($i=0; $i<$numBands; $i++) { 
      echo $this->Form->input('Band.Band['.$i.']', 
       array('multiple'=>false, 'empty'=>true, 'options'=>$bands, 
       'value'=>$this->data['Band'][$i]['BandsEvent']['band_id'])); 
     } 
    } else { 
     echo $this->Form->input('Band.Band[0]', array('multiple'=>false, 
      'empty'=>true, 'options'=>$bands)); 
    } 
0

您需要爲每個波段輸入使用不同的名稱屬性,並且正確設置結構以保存HABTM關係。假設您已將樂隊列表推入$ band。當用戶提交在於$這 - >數據的形式

echo $this->Form->input('Band.Band.0', array('multiple'=>false, 'empty'=>true, 'options'=>$bands)); 
echo $this->Form->input('Band.Band.1', array('multiple'=>false, 'empty'=>true, 'options'=>$bands)); 
echo $this->Form->input('Band.Band.2', array('multiple'=>false, 'empty'=>true, 'options'=>$bands)); 

這應該產生正確的結構[帶] [帶]是帶ID數組。

當加載編輯現有的事件,您需要通過波段進行迭代,並明確設置默認值:

foreach($this->data['Band']['Band'] as $index => $band_id) { 
    echo $this->Form->input("Band.Band.$index", array('multiple'=>false, 'empty'=>true, 'options'=>$bands, 'value'=>$band_id))); 
} 
+0

我不確定您的意思是「爲保存HABTM關係正確設置結構」。我已經在模型中正確設置了HABTM,並嘗試將輸入更改爲該模式,但現在它不保存任何一個。有什麼想法嗎? – Dave 2011-05-01 21:36:30