2012-02-15 12 views
0

Я только начал с CakePHP так голой со мной :) ...CakePHP: динамическая форма поля

У меня есть форма, которая имеет все поля вытащили динамические из таблицы базы данных «»: имена полех

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

Это всего лишь пример, форма более сложная.

Я узнал и увидел в php doc, что если поля формы соответствуют 1: 1 с таблицей модели, метод Save является пользователем, а новая строка создается со всеми значениями в соответствующих cels. Но как это работает, если для моей выборки все значения полей должны попадать в несколько строк, один за другим в таблице «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. Это приложение для построения форм, поэтому поля HAVE должны быть динамическими, и я не могу использовать «статическую» реализацию формы (hardcode имена полей в столбцах таблицы 1: 1). Имена и число полей меняются так: «Почему я их вытаскиваю для базы данных.

ответ

1

Я предлагаю вам создать метод в вашей модели (где вы хотите сохранить ваши поля), как:

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

Вы можете вызывать эту функцию в FieldsController Add Action:

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

Или в любом другом контроллере/модели с использованием ClassRegistry:

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

Убедитесь, что ваш данные находятся в правильном формате, например:

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

Спасибо, я попробую эту идею. –

Смежные вопросы