2014-02-10 31 views
-1

我已經完成了這個example中的所有工作。如何將兩個模型中的字段插入到一個表格中

但我不明白如何將id字段保存到相關表中。我有兩張表,公司和實體,有一對一的關係。它可以保存我插入的所有字段,但不保存爲company_identity_id。我需要使用餘波嗎?

在公司控制:

public function actionCreate() 
{ 
    $model1=new Company; 
    $model2=new Entity; 
    if(isset($_POST['Company'], $_POST['Entity'])) 
    { 
     // populate input data to $a and $b 
     $model1->attributes=$_POST['Company']; 
     $model2->attributes=$_POST['Entity']; 

    // validate BOTH $a and $b 
    $valid=$model1->validate(); 
    //$valid=$model2->validate() && $valid; 

    if($valid) 
    { 
     // use false parameter to disable validation 
     $model1->save(false); 
     $model2->save(false); 
     // ...redirect to another page 
    } 
} 
$this->render('create', array(
    'model1'=>$model1, 
    'model2'=>$model2, 
)); 
} 

在公司模式:

public function relations() 
{ 
    // NOTE: you may need to adjust the relation name and the related 
    // class name for the relations automatically generated below. 
    return array(
     'entity'=>array(self::HAS_ONE, 'Entity', 'entity_id') 
    ); 
} 
+0

顯示你做了什麼 –

+0

張貼你已經到目前爲止已經試過 –

+0

按我的理解,我可以添加$ model2-> COMPANY_ID = $ model1-> ID代碼; –

回答

2

好了,這些都是當我們開始打的Yii正常的疑慮。讓我們看看:

  1. 「規則」方法(在模型中)應該只用於由用戶填充的列。在你的情況下,我猜「entity_id」是由服務器處理的,所以把它從「規則」中刪除。使用該新配置,您可以在保存之前驗證兩個對象。

  2. 如果驗證成功,請先保存一個模型並使用其「id」來保存另一個引用的模型。類似的東西:

    public function actionCreate() 
    { 
        $model1=new Company; 
        $model2=new Entity; 
    
        if(isset($_POST['Company'], $_POST['Entity']))   
        { 
         // populate input data to $a and $b 
         $model1->attributes=$_POST['Company']; 
         $model2->attributes=$_POST['Entity']; 
    
         // validate BOTH $a and $b 
         $valid=$model1->validate(); 
         $valid=$model2->validate() && $valid; 
    
         if($valid) 
         { 
          $model2->save(); 
    
          $model1->entity_id = $model2->id; 
          $model1->save(); 
         } 
        } 
    
        $this->render('create', array(
         'model1'=>$model1, 
         'model2'=>$model2, 
        )); 
    } 
    
相關問題