0

我必须从一个表格更新两个表格。我有两个表 TestA 和 TestB。那么如何更新两个表 where TestB.testid=TestA.testid. 两个表都已填充。我需要根据 TestA 的 id 更新 TestB。下面是actionUpdateTestA的。

  public function actionUpdate($id)
        {       $model_A=new TestA;    
                $model_B=new TestB;    
            $model=$this->loadModel($id);
            if(isset($_POST['TestA'])&&isset($_POST['TestB']))
            {
                 $model_A->attributes=$_POST['TestA'];                   
                 $model_B->attributes=$_POST['TestB'];

                 $model_B->name="test";              

                 $model_A->save();
                 $model_B->save();    
            $this->render('update',array(
                'model'=>$model,
            ));
        }  

当我运行应用程序时,会在 TestB 中创建一个新条目,而不是更新现有条目。如何通过 id 更新表 TestB 中的行

4

3 回答 3

2

好的,如果这是更新,您需要首先从数据库中提取现有值,然后您需要确保将两个模型都发送到表单:

public function actionUpdate($id) {
    $model_A = TestA::model()->findByPk($id);
    $model_B = TestB::model()->findByAttributes(array('testid'=>$model_A->testid));
    if (isset($_POST['TestA']) && isset($_POST['TestB'])) {
        $model_A->attributes = $_POST['TestA'];
        $model_B->attributes = $_POST['TestB'];

        $model_B->name = "test";

        $model_A->save();
        $model_B->save();
    }
    $this->render('update', array(
        'model_A' => $model_A,
        'model_B' => $model_B,
    ));
}
于 2013-08-20T12:55:30.630 回答
0

保存后,您可以访问所有模型属性(包括 ID)。所以在你保存了$model_A之后,$model_A->testid会包含刚刚保存的模型(模型A)的testid。

if ($model_A->save()) {
   $model_B->testid = $model_A->testid;
   $model_B->save();
}
于 2013-08-20T12:49:01.610 回答
0

假设您在 Model_A 的控制器中并且您只是在更新 Model_A (您在更新操作中)。

  • 首次加载模型 A
  • 用 POST 数据填充模型 A 的属性
  • 加载模型B,如果不存在,创建新模型B
  • 用 POST 数据填充模型 B 的属性
  • 保存模型 A 和模型 B

虽然在这里使用关系更好(也更容易)并将整个模型 B 的东西放在模型 A 的 afterSave 方法中。

 public function actionUpdate($id)
        {
            $model=$this->loadModel($id);

            if(isset($_POST['TestA'])&&isset($_POST['TestB']))
            {
                 $model->attributes=$_POST['TestA'];

                 $modelB = TestB::model()->findByAttributes(array('testid'=>$model->testid));

                 if ($modelB == null) {
                   $modelB = new TestB;
                   $modelB->testid = $model->testid;
                 }

                 $model_B->attributes=$_POST['TestB'];


                 if ($model_A->save()) {
                    $model_B->save();
                 }

                $this->render('update',array(
                    'model'=>$model,
                ));
        }
于 2013-08-20T13:08:42.213 回答