Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当我刷新页面时,我的应用程序继续将数据插入数据库Yii2_Php_Database_Yii2 - Fatal编程技术网

Php 当我刷新页面时,我的应用程序继续将数据插入数据库Yii2

Php 当我刷新页面时,我的应用程序继续将数据插入数据库Yii2,php,database,yii2,Php,Database,Yii2,这就是行动 public function actionEfetuarPedidoReserva($idQuarto){ $modelPedidoReservaQuarto = new PedidoReservaQuarto(); $modelPedidoReserva = new PedidoReserva(); $model = new ComodidadesExtra(); $modelListaComodidades = new ListaComodida

这就是行动

public function actionEfetuarPedidoReserva($idQuarto){
    $modelPedidoReservaQuarto = new PedidoReservaQuarto();
    $modelPedidoReserva = new PedidoReserva();
    $model = new ComodidadesExtra();
    $modelListaComodidades = new ListaComodidadesQuarto();
    $modelPedidoReservaQuarto->quartoId = $idQuarto;

    if($modelPedidoReservaQuarto->save()){
        $modelPedidoReserva->nPessoas = 2;
        $modelPedidoReserva->preco = 70.00;
        $modelPedidoReserva->reservaQuartoId = $modelPedidoReservaQuarto->id;
        $modelPedidoReserva->userInfoId = Yii::$app->user->id;

        if($modelPedidoReserva->save()){
            $model->pedidoReservaId = $modelPedidoReserva->id;

            if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(['efetuar-pedido-reserva', 'idQuarto' => $idQuarto]);
            }

            return $this->render('../comodidades-extra/create', [
                'model' => $model, 'modelLista' => $modelListaComodidades
            ]);
        }
    }
}
当我刷新页面时,它添加最后插入的PeddoreServaid+1;
我想知道我的方法是否正确。

您的问题是每次调用
$model=new-comodiadesextra()时都会创建
comodiadesxtra
的新实例。III2将其视为新的独立行,并且需要告诉YII2,您应该使用现有行,使用:

$model = ComodidadesExtra::find()
    ->where(['pedidoReservaId' => $modelPedidoReserva->id])
    ->one();
您的控制器应该如下所示:

if($modelPedidoReserva->save()){
            if(null===($model = ComodidadesExtra::find()->where(['pedidoReservaId' => $modelPedidoReserva->id])
    ->one())) { 
                $model = new ComodidadesExtra(); 
            }
            $model->pedidoReservaId = $modelPedidoReserva->id;

            if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(['efetuar-pedido-reserva', 'idQuarto' => $idQuarto]);
            }

            return $this->render('../comodidades-extra/create', [
                'model' => $model, 'modelLista' => $modelListaComodidades
            ]);
        }

此操作是如何触发的?您的意思是什么?因为您每次调用该操作时都在保存模型。为什么首先保存模型,然后加载来自POST的数据?因为我需要将数据插入表中,而该表与另一个表的数据挂起。例如,首先我需要在PedidoReservaQuarto上插入数据,然后插入到PedidoReservashow表单中,您从中保存了什么?您是否只有
$model
post?