gpt4 book ai didi

php - Yii 中的更新操作是如何工作的

转载 作者:可可西里 更新时间:2023-11-01 07:39:56 25 4
gpt4 key购买 nike

我是 Yii 框架的新手。我创建了一个表 TblUser。现在,我有三列 usernamepasswordemail。我在 Yii 中使用 CRUD 操作。成功连接到数据库。我也能够在表中创建新记录。现在数据库中的条目显示为

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

现在,在 View 表单中,我通过注释 (_form.php) 删除了字段 email。我正在使用此表单更新剩余字段。

 <?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 中注释了 email 字段。现在在我的 Controller 中,我有如下所示的更新代码:

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 中,保存新记录和更新已有记录是类似的 Action 。

保存新记录时,将创建如下对象。

$model = new User; 

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

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

现在 isNewRecord 将为 true/1

根据标志,将执行插入或更新查询。

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

关于php - Yii 中的更新操作是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20746805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com