我目前正在使用CakePHP 2.x.
我使用form_helper创建所有表单,然后使用活动记录方式保存模型数据。它真的很整洁,但我找不到保存一个特定结构的方法。
我有2个表,一个用于用户基本信息,一个用于用户详细信息,有很多不同的字段:User和User_Detail。
User:
id | name | email
------------------------
1 | John | john@doe.com
2 | Paul | paul@doe.com
User_Detail:
id | user_id | field | value
-----------------------------
1 | 1 | sex | m
2 | 1 | age | 21
3 | 2 | height | 180
让用户填写某些字段的最佳方法是什么?可以在应用程序中硬编码要完成的字段。是否可以使用表单助手和saveRelationship()?
答案 0 :(得分:1)
根据您的评论,我会添加一个包含“自定义字段”名称的新表,我们称之为“custom_fields”,这将是其定义
custom_fields: ID 名称
它的模型叫做CustomField,它有很多UserDetail
您的user_details表将具有此结构
user_details: ID 用户身份 custom_field_id 值
此模型(UserDetail)属于CustomField。
您的模型用户有很多用户详细信息。
现在,在您的用户表单中,您可能希望选择所有可能的CustomValues,为了做到这一点,您之前在控制器中执行了类似的操作
$customValues = $this->CustomValues->find('list');
$this->set(compact('customValues'));
所以,在你看来,你会有类似的东西
echo $this->Form->input('UserDetail.custom_field_id', array('type' => 'select', 'values' => $customValues));
echo $this->Form->input('UserDetail.value')
当然,提交此表单后,您将致电Model::SaveAssociated
我希望你现在有了这个主意。
答案 1 :(得分:0)
假设我明白你要做什么.....如果使用Form Helper你可以按如下方式构建输入字段:
echo $this->Form->input('User.name');
echo $this->Form->input('User.email');
echo $this->Form->input('User_Detail.sex');
echo $this->Form->input('User_Detail.age');
echo $this->Form->input('User_Detail.height');
然后当你保存时,你应该使用saveAssociated($ this-> request-data),它应该通过将记录保存到两个模型并自动创建相应的User_Detail.user_id字段来工作。