2012-02-15 3 views
0

난 그냥 CakePHP의 : 동적 양식 필드

나는 모든 필드가 'fieldName에'데이터베이스 테이블에서 동적 뽑아있는 형태가 ... :) 저와 너무 베어 CakePHP를 시작했다 :

ID | FieldName 
-------------- 
11 | username 
22 | password 
33 | Address 
44 | etc 

이것은 단지 예일 뿐이며 양식은 더욱 복잡합니다.

필자는 PHP 필드에서 양식 필드가 모델 테이블과 1 : 1로 일치하면 Save 메서드가 사용자이고 적절한 행의 모든 ​​값을 사용하여 새 행이 만들어 짐을 알게되었습니다. 그러나 내 샘플 폼에 대해 모든 필드 값이 다음과 같은 구조의 'FieldValues'테이블에서 여러 줄로 하나씩 가져와야하는 경우 어떻게 작동합니까?

ID | FieldId | Value    | DataSet 
--------------------------------------------- 
1 | 11  | 'value for username' | 1 
2 | 22  | 'value for password' | 1 
3 | 33  | 'value for address' | 1 

fieldID가 = FK Fieldnames.ID에

난 그냥 궁금 해서요

내가 "마법을 사용할 수있다

foreach field -> $sql = "sql insert query" -> $this->query($sql)' 
은"고전 "을 사용하는 방법에서이 작업을 수행 할 수 있었다 "이 과제를 해결하기위한 케이크. 두 번째 질문 : "마법"이 가능하면 두 번째 매개 변수를 추가하고 각 데이터 세트에 새 DataSet 값을 설정하려면 어떻게해야합니까?

감사합니다, 블라드

P.S. 이것은 양식 작성기 응용 프로그램이므로 필드가 동적이어야하고 "정적"양식 구현 (테이블 열 1 : 1의 필드 이름을 하드 코드)을 사용할 수 없습니다. 필드 이름과 번호는 '왜 내가 데이터베이스를 위해 그들을 끌어 당기고 있는지에 따라 다릅니다.

// FieldsController 
$this->Field->saveFields($this->request->data); 

: 당신의 FieldsController 추가 작업에이 기능을 호출 할 수 있습니다

// Field model 
public function saveFields($data) { 
    foreach($data as $field) { 
     $this->save($field); 
    } 
} 

:

답변

1

난 당신 같은 모델의 방법을 (당신이 당신의 필드를 저장할 위치)을 작성하는 것이 좋습니다 또는 ClassRegistry를 사용하여 다른 컨트롤러/모델에서 :

// FooController 
$Field = ClassRegistry::init('Field'); 
$Field->saveFields($this->request->data); 

데이터는 다음과 같은 올바른 형식으로되어 있습니다.

$data [0] [ ModelName ] = array(
    Field1 => Value1, 
    Field2 => Value2 
) 
+0

감사합니다.이 아이디어를 사용해 보겠습니다. –