当用户添加一个事件时,我希望他们能够选择在该事件中正在播放哪个频段。我已经拥有了我的事件表和我的Bands表,每个表都有HABTM模型关联到另一个。
在我的“添加活动”页面上,我有一个显示乐队的下拉列表,因此他们可以选择一个。
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));
它不会在bands_events HABTM表中保存三行 - 它只保存一行。当我尝试编辑事件时,所有三个选择下拉列表默认选择一个先前选择的波段,但不是全部(显然它不能,因为它没有保存数据)。
有关如何为活动添加多个下拉菜单的多个下拉菜单的任何想法?有太多的乐队有复选框 - 我讨厌多选框 - 对大多数用户来说太难了。
非常感谢任何帮助。
答案 0 :(得分:0)
您需要为每个Band输入使用不同的名称属性,并且还要正确设置结构以保存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));
当用户提交表单时,这应该产生正确的结构$ this-> data [Band] [Band]是一个band 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)));
}
答案 1 :(得分:0)
感谢Tyler引导我走向正确的方向。
我最终让它使用以下代码。
控制器没有任何特殊之处,并使用正常的$ this->事件 - >保存($ this->数据)将数据保存在HABTM连接表“bands_events”中...就像我没有使用一系列乐队。
如果此代码中的某些内容已关闭,请告诉我 - 我不是蛋糕大师,我只是将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));
}