2011-11-02 87 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()'? –

相關問題