微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 更新操作如何在Yii中工作

我是Yii框架的新手.我创建了一个表TblUser.现在,我有三列用户名,密码和电子邮件.
我在Yii中使用CRUD操作.已成功连接到数据库.我也能够在表格中创建一条新记录.
现在,数据库中的条目显示

+----+----------+----------+--------------------+
| id | username | password | email              |
+----+----------+----------+--------------------+
|  1 | test1    | pass1    | test1@example.com  |
|  2 | test2    | pass2    | test2@example.com  |
|  3 | test3    | pass3    | test3@example.com  |
+-----------------------------------------------+

现在,在视图表单中,我通过注释(_form.PHP)删除了字段电子邮件.我正在使用此表单来更新剩余的字段.

 <?PHP
    /* @var $this TblUserController */
    /* @var $model TblUser */
    /* @var $form CActiveForm */
    ?>

    <div class="form">

    <?PHP $form=$this->beginWidget('CActiveForm', array(
            'id'=>'tbl-user-form',
            'enableAjaxValidation'=>false,
    )); ?>

            <p class="note">Fields with <span class="required">*</span> are required.</p>

            <?PHP echo $form->errorSummary($model); ?>

            <div class="row">
                    <?PHP echo $form->labelEx($model,'username'); ?>
                    <?PHP echo $form->textField($model,'username',array('size'=>60,'maxlength'=>128)); ?>
                    <?PHP echo $form->error($model,'username'); ?>
            </div>

            <div class="row">
                    <?PHP echo $form->labelEx($model,'password'); ?>
                    <?PHP echo $form->passwordField($model,'password',array('size'=>60,'maxlength'=>128)); ?>
                    <?PHP echo $form->error($model,'password'); ?>
            </div>
<!--    
            <div class="row">
                    <?PHP echo $form->labelEx($model,'email'); ?>
                    <?PHP echo $form->textField($model,'email',array('size'=>60,'maxlength'=>128)); ?>
                    <?PHP echo $form->error($model,'email'); ?>
            </div>
-->    
            <div class="row buttons">
                    <?PHP echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
            </div>

    <?PHP $this->endWidget(); ?>

要使用其余字段,我在_form.PHP中注释了电子邮件字段.
现在在我的控制器中,我有更新代码,如下所示:

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

                // Uncomment the following line if AJAX validation is needed
                // $this->performAjaxValidation($model);

                if(isset($_POST['TblUser']))
                {
                        $model->attributes=$_POST['TblUser'];
                        if($model->save())
                                $this->redirect(array('view','id'=>$model->id));
                }

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

当我看到我的查询日志时,更新的查询

UPDATE `tbl_user` SET `id`=2, `username`='1234', `password`='1234', `email`='test2@example.com' WHERE `tbl_user`.`id`=2  

并不是

UPDATE `tbl_user` SET `password`='1234' WHERE `tbl_user`.`id`=2  

现在我的问题是为什么再次更新未更改的值而不是仅更新更改的值. Yii是否对所有内容执行此更新查询.这是如何运作的.

解决方法:

在Yii中,新记录保存和更新现有记录是类似的操作.

保存新记录时,将创建对象,如下所示.

$model = new User; 

现在每个模型都有一个名为isNewRecord的标志.这将设置为false / 0.
用于编辑/更新

$model=$this->loadModel($id); 

现在isNewRecord将是真/ 1

根据该标志,将执行Insert或Update查询.

Yii不知道哪些字段已更改.所以它只是根据标志更新与模型(即表)相关的所有字段值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐