使用CakePHP中的复合索引保存HasMany关系数据

时间:2014-02-11 00:14:36

标签: php cakephp has-many cakephp-model

我目前正在使用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()?

2 个答案:

答案 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字段来工作。