Yii Framework Forum: How Does The Update Operation Work In Yii - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

How Does The Update Operation Work In Yii Rate Topic: ***** 1 Votes

#1 User is offline   Rudra 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 118
  • Joined: 12-July 13

Posted 23 December 2013 - 10:54 AM

I'm new to Yii framework. I created a table `TblUser`. Now, I have three columns `username`,`password` and `email`.
I'm using `CRUD` operations in Yii. Connection to database is successfully made. I was able to create a new record in the table also.
Now the entry in the database reads as
    +----+----------+----------+--------------------+
    | id | username | password | email              |
    +----+----------+----------+--------------------+
    |  1 | test1    | pass1    | test1@example.com  |
    |  2 | test2    | pass2    | test2@example.com  |
    |  3 | test3    | pass3    | test3@example.com  |
    +-----------------------------------------------+

Now, in the view form I removed the field `email` by commenting (_form.php). I'm using this form to update the remaining fields.

     <?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(); ?>

To use rest of the fields I commented the `email` field in the _form.php.
Now in my controller I have the update code as shown below :
    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,
                    ));
            }
 

When I see my query logs, the query updated is
    UPDATE `tbl_user` SET `id`=2, `username`='1234', `password`='1234', `email`='test2@example.com' WHERE `tbl_user`.`id`=2  

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

Now my question why is updating the unchanged values again instead of updating only changed values. Does Yii do this update query for everything. How does this work. Is there any documentation on how the query is executed.
0

#2 User is offline   nineinchnick 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 622
  • Joined: 12-September 11
  • Location:Bialystok, Poland

Posted 23 December 2013 - 01:35 PM

Did you read the api docs for CActiveRecord.save()? It got a second argument with a list of attributes to save. Also, check out saveAttributes().

Yii 1 doesn't support detecting attribute value changes out of the box, you'd have to find an extension that does it.
Don't be a dick.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users