我刚刚开始使用cakephp和我一起裸露:) ...
我有一个表单,其中所有字段都是从数据库表'FieldNames'中动态提取的:
ID | FieldName
--------------
11 | username
22 | password
33 | Address
44 | etc
这只是一个例子,形式更复杂。
我已经学习并在php doc中看到,如果表单字段与模型表匹配1:1,则Save方法为user,并创建一个新行,其中包含正确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 to Fieldnames.ID
我能够在使用“经典”
的方法中做到这一点foreach field -> $sql = "sql insert query" -> $this->query( $sql )'
我只是想知道我可以用蛋糕中的“魔法”来解决这个任务。 第二个问题:如果“魔术”是可能的,我如何在每个数据集上添加第二个参数来设置新的DataSet值?
谢谢, 维拉德
P.S。这是一个表单构建器应用程序,因此字段必须是动态的,我不能使用“静态”表单实现(硬编码表格列1:1中的字段名称)。字段名称和数字因为我为数据库拉动它们而变化。
答案 0 :(得分:1)
我建议您在模型中创建一个方法(您要保存字段的位置),如:
// Field model
public function saveFields($data) {
foreach($data as $field) {
$this->save($field);
}
}
您可以在FieldsController添加操作中调用此函数:
// 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
)