2011-11-02 70 views
0

使用CakePHP的表单方法(Cake 1.3.13)我试图创建一个表单来编辑和保存大量的记录;它实际上只是一个大表,用户正在为每条记录保存一个字段。 Cake的默认表单函数产生只提交一条记录的表单元素;当我提交表单时,只保存最后一条记录的数据,因为所有表单元素都具有相同的名称,所以它们只保存在`$ this-> data'中的两个字段中。创建一个保存多个记录的表格

这是我的表单元素:

$this->Form->hidden('TicketNo', array('value'=>$ticket['Hauler']['TicketNo'])) 
$this->Form->checkbox('Paid',array('value'=>$ticket['Hauler']['Paid'])) 

我们得到以下HTML,这将仅保存一个记录:

<input type="hidden" name="data[Hauler][TicketNo]" value="35498155" hiddenfield="1" id="HaulerTicketNo"> 

他们需要的是格式:

<input type="hidden" name="data[Hauler][id][TicketNo]" value="35498155" hiddenfield="1" id="HaulerTicketNo"> 

其中id是记录的主键。这样匹配记录的id就传递给$this->data数组,如果我理解正确,我可以保存所有匹配的记录。我可以通过HTML和PHP手动构建这样的表单,但CakePHP的表单方法必须有一种方法来完成此操作,对吧?

回答

2

遍历您的记录,并使用这个语法:

我不会使用id作为数组键,而是遍历记录:

$this->Form->hidden('Hauler.' . $i . '.TicketNo', array('value'=>$ticket['Hauler']['TicketNo'])); 

的resuling POSTDATA会像$数据数组[ '重型汽车'] [0] [ 'TicketNo']);

将ID放在每个记录的隐藏字段中,我认为saveAll()应该吞下它。如果没有循环它,你可以简单地保存()每个记录,因为该ID已经存在,你不需要改变保存或设置ID的数组结构。

而你没有按照框架的惯例。 'TicketNo'应该是'ticket_no';我强烈建议大家遵循这些惯例。

+0

这是外部数据,所以我必须遵循他们的约定。我现在尝试迭代器方法,虽然 –

+0

这是行得通的。奇怪的是,我得到了'SELECT COUNT(*)AS [count] FROM [rs_Hauler] AS [Hauler] WHERE [Hauler]。[id] = 225434'你有什么想法为什么会发生'saveAll()'? –

相关问题