2014-02-11 79 views
0

我目前正在使用CakePHP 2.x.在CakePHP中使用複合索引保存HasMany關係數據

我使用form_helper製作我的所有表格,然後使用活動記錄方式保存模型數據。它非常簡潔,但我找不到保存某個特定結構的方法。

我有2個表格,一個是用戶基本信息,另一個是用戶詳細信息,有很多不同的字段:User和User_Detail。

User: 

id | name | email 
------------------------ 
1 | John | [email protected] 
2 | Paul | [email protected] 

User_Detail: 
id | user_id | field | value 
----------------------------- 
1 | 1  | sex | m 
2 | 1  | age | 21 
3 | 2  | height | 180 

什麼是讓用戶填寫某些領域的最佳方式?可以在應用程序中對哪些字段進行硬編碼。是否可以使用表單助手和saveRelationship()?

+0

「性別」,「年齡」,「身高」來自哪裏?他們是不斷的絃樂?還是隻是打開用戶填寫表單的輸入? –

+0

他們是不斷的字符串,但我會有很多,並不是每個用戶都會有相同的 –

回答

1

根據您的意見,我想補充一點,包含「自定義字段」的名稱的新表,讓我們把它稱爲「custom_fields」,這將是它的定義

custom_fields: ID 名

它的模式被稱爲的CustomField和它的hasMany UserDetail

你user_details表都會有這樣的結構

user_details: id user_id custom_field_id value

此模型(UserDetail)屬於CustomField。

您的模型User hasMany UserDetail。

現在,在您的用戶形成你可能要與所有可能的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

我希望你有沒有這個想法。

0

假設我理解你試圖做.....如果使用表單輔助函數,你可以構建你的輸入字段如下:

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($這個 - > request-data),它應該通過將記錄保存到兩個模型中並自動創建適當的User_Detail.user_id字段來工作。

+0

傑裏,也許我誤解了你,但User_Detail.sex不存在。它應該創建一個新行(或編輯當前行)User_Detail.field =「sex」和User_detail.value =「m」 –

+0

對不起。在答覆中,我失去了一些想法。忘記我寫的東西。我現在明白你在找什麼。如果我有一個想法,我會發布。 –

+0

納薩雷諾......一個想法。我偶爾需要將隨機分組的名稱/值對(在您的案例字段/值對中)與記錄相關聯。我採取的一種方法是創建一個看起來像$ attributes = array('sex'=>'m','age'=>'21')的關聯數組。這對每個用戶記錄都會有所不同。然後,我會序列化數組,如下所示:$ serialized_attributes = json_encode($ attributes),然後將字符串保存在主模型中(在您的情況下爲用戶模型)。它適用於我的目的,但如果你想搜索數據,這可能是一個問題。 –

相關問題