创建一个表单保存多个记录

时间:2011-11-02 14:42:58

标签: php cakephp

使用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的表单方法必须有一种方法可以做到这一点,对吗?

1 个答案:

答案 0 :(得分:2)

循环记录并使用以下语法:

我不会将id用作数组键,而是迭代记录:

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

结果postdata将是一个数组,如$ data ['Hauler'] [0] ['TicketNo']);

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

顺便说一下,你并没有遵循框架规则。 'TicketNo'应为'ticket_no';我强烈建议大家遵守这些惯例。

相关问题