2011-05-01 52 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