我正在建立一个平台,访问者可以填写表格,要求在各个市场中提供产品和服务的报价。
示例:访客John Doe希望在他的屋顶上安装太阳能电池板。他访问我们的网站,选择他的类别(太阳能电池板)并填写表格。然后,他的联系方式将发送给我们所有的太阳能电池板供应商。
可以请求报价的所有类别都存储在category
表中:
id | name
-------------------
1 | solar panels
2 | car rental
每个类别都有2个需要填写的表格:
一个表单,其中包含访问者的详细联系信息以及他们希望接收报价的类别。此表单对于每个类别都具有相同的字段,并存储在inquiry
表中:
id | fk_id_category | name | email | Region
----------------------------------------------------------
1 | 1 | John Doe | johndoe@gmail.com | New York
2 | 2 | Jane Doe | janedoe@gmail.com | California
一个表单,其中包含与该类别相关的特定问题。这些存储在category_field
表中:
id | fk_id_category | label
---------------------------------------------------------------
1 | 1 | What type of roof do you have?
2 | 2 | What type of car do you want to rent?
3 | 2 | For how long do you want to rent the car?
这些问题的答案存储在inquiry_detail
表中:
id | fk_id_inquiry | fk_id_category_field | answer
---------------------------------------------------------------
1 | 1 | 1 | A flat roof
2 | 2 | 2 | An SUV
3 | 2 | 3 | One week
我正在使用Doctrine 1.2.4,我想了解如何保存特定类别的答案(inquiry_detail
表中的答案)。
目前我有以下解决方案,但我认为应该有更好的方法:将每个表单元素的name
属性设置为id
中相应记录的category_field
表:
<label for="2">What type of car do you want to rent?</label>
<input type="text" name="2" />
<label for="3">For how long do you want to rent the car?</label>
<input type="text" name="3" />
提交表单后,我们遍历$_POST
数组并为每个元素创建一个新的inquiry_detail
记录(暂时不介意fk_id_inquiry
)。
foreach($_POST as $key => $value) {
$inquiryDetail = new Model_Inquiry_Detail();
$inquiryDetail['fk_id_category_field'] = $key;
$inquiryDetail['answer'] = $value;
$inquiryDetail->save();
}