加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:51:10 所属栏目:PHP教程 来源:网络整理
导读:我是Yii框架的新手.我创建了一个表TblUser.现在,我有三列用户名,密码和电子邮件. 我在Yii中使用CRUD操作.已成功连接到数据库.我也能够在表格中创建一条新记录. 现在,数据库中的条目显示为 +----+----------+----------+--------------------+| id | username
我是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','password'); ?>
            </div>
<!--    
            <div class="row">
                    <?php echo $form->labelEx($model,'email'); ?>
                    <?php echo $form->textField($model,'email','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不知道哪些字段已更改.所以它只是根据标志更新与模型(即表)相关的所有字段值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读