2012-01-20 55 views
0

我有一對具有一對一關係的表。保存嵌入式一對一關係的Propel symfony表格

我有一個需要嵌入的裏面一個人形式的投訴表格,相關的模式如下:

complaint: 
    id:       ~ 
    created_at:     ~ 
    updated_at:     ~ 
    complainant_id:    { type: integer, foreignTable: person_data, foreignReference: id, onDelete: setnull } 
    status:      { type: tinyint, default: 1 } 
    complaint_title:    { type: varchar(64) } 
    complaint_number:    { type: varchar(16) } 
    recipient:      { type: varchar(128) } 

    person_data: 
    id:       ~ 
    created_at:     ~ 
    updated_at:     ~ 
    company_name:     { type: varchar(64) } 
    first_name:     { type: varchar(64) } 
    last_name:      { type: varchar(64) } 
    email:       { type: varchar(128) } 

我能夠成功地保存兩個對象的數據庫,但主要的投訴對象不會更新person_data行的complainant_id。

有誰知道爲什麼這不能正常工作,以及如何強制它正確更新投訴對象?

我使用的是symfony 1.4.13,Propel 1.6.3。

UPDATE:

這裏是嵌入形式的代碼:

<?php 
    public function configure() 
    { 
     $use_fields = array(); 

     // ...other fields added... 


     $sub_form = new PersonDataForm(array(), array()); 
     $this->embedForm('complainant', $sub_form); 
     array_push($use_fields, 'complainant'); 

     $this->useFields($use_fields); 
    } 
+0

你在使用表格嗎?或者做一切代碼? –

+1

你有沒有試過'embedRelation'? –

+0

好的,你不能使用嵌入關係。您的模式定義的方式,您只能在添加/編輯投訴時選擇*投訴人。 –

回答

0

我已經找到了解決這一問題。

覆蓋表單類中的saveEmbeddedForms方法。

更新主要對象發生在保存嵌入式窗體後,因此可用於更新主要對象。

public function saveEmbeddedForms($con = null, $forms = null) 
{ 

    // save the embedded forms 
    parent::saveEmbeddedForms($con, $forms); 

    // loop through all embedded forms and update the main object with their ids 
    foreach($this->getEmbeddedForms() as $name => $embedded_form) 
    { 
     switch($name) 
     { 
      case 'recipient': 
       // criteria to determine if the sub-object should be saved or not 
       if($embedded_form->getObject()->getFirstName() == '' && $embedded_form->getObject()->getLastName() == '') 
       { 
        $embedded_form->getObject()->delete(); 
        $this->getObject()->setRecipientId(null); 
        $this->getObject()->save(); 
       } 
       else 
        $this->getObject()->setRecipientId($embedded_form->getObject()->getId()); 
       break; 
      case 'complainant': 
       if($embedded_form->getObject()->getFirstName() == '' && $embedded_form->getObject()->getLastName() == '') 
       { 
        $embedded_form->getObject()->delete(); 
        $this->getObject()->setComplainantId(null); 
        $this->getObject()->save(); 
       } 
       else 
       { 
        $this->getObject()->setComplainantId($embedded_form->getObject()->getId()); 
       } 
       break; 
      default: 
       break; 
     } 
    } 

    // save the main object with the new sub-object keys set 
    $this->getObject()->save();   
} 

不幸的是,我無法在互聯網上找到這個解釋。所以這裏是爲了那些追隨我的人。