Php 如何从一个表单yii更新两个表
我必须从一张表格中更新两张表格。我有两张表TestA和TestB。 那么如何更新两个表,其中Php 如何从一个表单yii更新两个表,php,yii,Php,Yii,我必须从一张表格中更新两张表格。我有两张表TestA和TestB。 那么如何更新两个表,其中TestB.testid=TestA.testid。两个表都已填充。我需要根据TestA的id更新TestB。 下面是TestA的actionUpdate public function actionUpdate($id) { $model_A=new TestA; $model_B=new 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中的行保存后,您可以访问所有模型属性(包括id)。因此,在保存$model\u A之后,$model\u A->testid将包含刚刚保存的模型(model A)的testid
好的,如果这是更新,您需要首先从数据库中提取现有值,然后需要确保将两个模型都发送到表单:
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,
));
}
假设您在Model_A的控制器中,并且只更新Model_A(您在更新操作中)
- 第一负荷模型A
- 用POST数据填充模型A的属性
- 加载模型B,如果不存在,则创建新模型B
- 用POST数据填充模型B的属性
- 保存模型A和模型B
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,
));
}
请看一看你的代码,我打赌它可以从更好的格式中获益。K…将更好地格式化它这是TestA或TestB的控制器还是两者都不是?作为输入输入的
$id
是TestA或TestB的id还是两者都不是?@我已经提到过它是测试中的一个控制器\u AI得到了这个异常…CDbCommand无法执行SQL语句:SQLSTATE[23000]:完整性约束冲突:1062键“PRIMARY”的重复条目“5”。数据库中已有一行具有该id,您希望插入新行(您正在代码第3行创建新的模型B)。如果你想更新模型B,你应该先加载该模型,而不是创建一个新模型。你能解释一下我是新手吗?如果你想让我们帮助你调试,你必须更具描述性。什么不起作用?嗯,这会起作用的)。我不明白您想做什么。TestA和TestB的行是否已经存在?您是同时更新这两个测试还是更新TestA并创建新的TestB?你的观点是什么?你得到了什么错误?绝对工作正常…我把$model\u B->testid=$model\u A->testid;它给了我一个例外,但testA的更新形式中的字段并没有填充这个值。Gridview正在填充。我可以为此做些什么
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,
));
}