2011-11-02 2 views
0

CakePHP의 폼 메서드 사용 (Cake 1.3.13) 많은 레코드를 편집하고 저장하는 폼을 만들려고합니다. 정말 큰 테이블 일 뿐이며 사용자는 각 레코드에 대해 단일 필드를 저장하고 있습니다. Cake의 기본 형식 함수는 하나의 레코드 만 제출하는 양식 요소를 생성합니다. 폼을 제출할 때 마지막 레코드의 데이터 만 저장됩니다. 모든 폼 요소는`$ this-> data '의 두 필드에만 저장되는 동일한 이름을 갖기 때문에 저장됩니다.여러 레코드를 저장하는 폼 만들기

이 내 폼 요소 :

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

그들이에 있어야 형식 :

$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][id][TicketNo]" value="35498155" hiddenfield="1" id="HaulerTicketNo"> 

여기서 id는 레코드의 기본 키입니다. 이 방법을 사용하면 일치하는 레코드의 id가 $this->data 배열로 전달되므로 올바르게 이해하면 모든 일치하는 레코드를 저장할 수 있습니다. HTML과 PHP를 통해 이러한 양식을 수동으로 생성 할 수 있지만이를 수행하는 cakePHP 양식 방법이 있어야합니다.

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

resuling의 POSTDATA는 $ 데이터와 같은 배열이됩니다

내가 기록을 반복하는 대신 배열 키로 ID를 사용하지 않을 :

답변

2
기록을 통해

루프와 구문을 사용 [ 'Hauler'] [0] [ 'TicketNo']);

id를 각 레코드의 숨겨진 필드에 넣으면 saveAll()이이를 삼킨다 고 생각합니다. 루프가 아니라면 id가 이미 존재하고 id를 저장하거나 배열하기 위해 배열 구조를 변경할 필요가 없기 때문에 각 레코드를 간단히 저장할 수 있습니다().

그러면 프레임 워크 규칙을 따르지 않을 것입니다. 'TicketNo'는 'ticket_no'여야합니다. 나는 강력하게 모두에게 관습을 따르라고 제안한다.

+0

외부 데이터이므로 관련 규정을 준수해야합니다. 그래도 iterator 메소드를 시도하고있다. –

+0

그건 효과가있다. 이상하게도 나는 [선택기] WHERE [Hauler]. [id] = 225434' [SELECT] COUNT (*) [rs_Hauler] AS [절약 할 수있는 모든 행에 대해] 'saveAll()'에서 왜 그런 일이 일어날 지 알고 싶습니까? –

관련 문제