与Doctrine的复杂关系

时间:2013-01-13 02:38:28

标签: doctrine relational-database doctrine-1.2

我正在建立一个平台,访问者可以填写表格,要求在各个市场中提供产品和服务的报价。

示例:访客John Doe希望在他的屋顶上安装太阳能电池板。他访问我们的网站,选择他的类别(太阳能电池板)并填写表格。然后,他的联系方式将发送给我们所有的太阳能电池板供应商。

可以请求报价的所有类别都存储在category表中:

id | name
-------------------
1  | solar panels
2  | car rental

每个类别都有2个需要填写的表格:

  1. 一个表单,其中包含访问者的详细联系信息以及他们希望接收报价的类别。此表单对于每个类别都具有相同的字段,并存储在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
    
  2. 一个表单,其中包含与该类别相关的特定问题。这些存储在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
    
  3. 我正在使用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();
    }
    

0 个答案:

没有答案