我必须从一个表单更新两个表。我有两个表TestA和TestB。
那么如何更新TestB.testid=TestA.testid
的两个表。这两个表都已填充。我需要根据TestA的id更新TestB。
以下是TestA的actionUpdate
。
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
中的行答案 0 :(得分: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,
));
}
答案 1 :(得分:0)
保存后,您可以访问所有模型属性(包括ID)。因此,在您保存$ model_A之后,$ model_A-> testid将包含刚刚保存的模型(模型A)的testid。
if ($model_A->save()) {
$model_B->testid = $model_A->testid;
$model_B->save();
}
答案 2 :(得分:0)
假设您在Model_A的控制器中并且您只是更新Model_A(您正在进行更新操作)。
虽然在这里使用关系更好(也更容易)并且将整个模型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,
));
}