Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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 Yii插入记录而不是更新_Php_Yii - Fatal编程技术网

Php Yii插入记录而不是更新

Php Yii插入记录而不是更新,php,yii,Php,Yii,我正在使用Yii框架,但这可能与我的php代码有关 我的控制器中有3种方法,1种用于创建,1种用于更新,1种用于保存。 创建和更新渲染相同的表单 保存记录时一切正常。但当我更新一条记录时,它会创建一条新记录。 在我的更新方法中,我加载现有记录并获得正确的值,但当我保存时,它会将其保存在新记录中。我尝试使用$model->update()而不是$model->save(),但出现了无法更新新记录的错误 提前感谢您提供的任何见解 方法创建 $model = new Comment;

我正在使用Yii框架,但这可能与我的php代码有关

我的控制器中有3种方法,1种用于创建,1种用于更新,1种用于保存。 创建和更新渲染相同的表单

保存记录时一切正常。但当我更新一条记录时,它会创建一条新记录。 在我的更新方法中,我加载现有记录并获得正确的值,但当我保存时,它会将其保存在新记录中。我尝试使用$model->update()而不是$model->save(),但出现了无法更新新记录的错误

提前感谢您提供的任何见解

方法创建

$model = new Comment;

        $this->renderPartial('_formComment',array(
                'model'=>$model,
                'post_id'=>$post_id,)
        ); 
$model=$this->loadModel($comment_id);

        $this->renderPartial('_formComment',array(
                'model'=>$model,
                'post_id'=>$model->post_id,
                'comment_id'=>$model->id,)
        );
$comment=new Comment;

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

        if($model->save()) {

            echo ('save ok');                   

        }
    }
方法更新

$model = new Comment;

        $this->renderPartial('_formComment',array(
                'model'=>$model,
                'post_id'=>$post_id,)
        ); 
$model=$this->loadModel($comment_id);

        $this->renderPartial('_formComment',array(
                'model'=>$model,
                'post_id'=>$model->post_id,
                'comment_id'=>$model->id,)
        );
$comment=new Comment;

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

        if($model->save()) {

            echo ('save ok');                   

        }
    }
保存方法

$model = new Comment;

        $this->renderPartial('_formComment',array(
                'model'=>$model,
                'post_id'=>$post_id,)
        ); 
$model=$this->loadModel($comment_id);

        $this->renderPartial('_formComment',array(
                'model'=>$model,
                'post_id'=>$model->post_id,
                'comment_id'=>$model->id,)
        );
$comment=new Comment;

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

        if($model->save()) {

            echo ('save ok');                   

        }
    }
我的更新方法调用的my loadmodel函数

if($this->_model===null)
        {

            $this->_model=Comment::model()->findbyPk($comment_id);
            if($this->_model===null)
                throw new CHttpException(404,'The requested page does not exist.');
        }
        return $this->_model;
你有

$comment=new Comment; 

在save方法中,它总是创建一个新模型。但您需要加载现有模型,设置属性并保存它。在保存方法中传递$model。

猜测:您的表单为主键属性提交了一个空白值,并且您的模型没有跳过它的验证规则。@d如果是,您是对的。我认为只要做$model->attributes=$\u POST['Opinion'];将注释id设置为注释主键的当前值。但是,当我将$model->id设置为当前注释id时,出现了完整性错误,它试图插入一条具有相同主键的记录。我尝试了更新而不是保存,结果还是一样。正在尝试更新新记录。您的“保存方法”看起来不正确,因为您混合了
$comment
$model
。您应该按其ID加载现有注释,而不是执行
新建注释
。好的,谢谢。我更改了保存方法并检查了id,如果存在id,我不会创建新的注释@alexk984