Php 哎,如何避免以提交按钮形式节省开支

Php 哎,如何避免以提交按钮形式节省开支,php,yii,Php,Yii,为了避免重复,我想避免在字段中存储的数据与数据库中存储的数据相同时在数据库中进行保存,在yii中,我使用gii制作的表单,我在另一个视图中制作渲染部分,因此您可能会在视图操作中看到代码,这是完全正常的,下面是代码 控制器/动作视图 public function actionView($id) { $dec=new DecretoCaracterizacion; if(isset($_POST['DecretoCaracterizacion']))

为了避免重复,我想避免在字段中存储的数据与数据库中存储的数据相同时在数据库中进行保存,在yii中,我使用gii制作的表单,我在另一个视图中制作渲染部分,因此您可能会在视图操作中看到代码,这是完全正常的,下面是代码

控制器/动作视图

public function actionView($id)
    {
        $dec=new DecretoCaracterizacion;

        if(isset($_POST['DecretoCaracterizacion']))
        {
            $error='error';
            $model=DecretoCaracterizacion::model()->findAll();
            $dec->attributes=$_POST['DecretoCaracterizacion'];
            if(in_array($_POST['DecretoCaracterizacion']['decreto_id'] , $model))
                $this->redirect(array('view', 'id'=>$id, 'error'=>$error));
            elseif($dec->save())
                $this->redirect(array('view', 'id'=>$id));
        }


        $this->render('view',array(
            'model'=>$this->loadModel($id), 'dec'=>$dec
        ));
    }
DecretoCaracterizacion的表单呈现空间

<?php
/* @var $this EquipoController */
/* @var $car Equipo */
/* @var $form CActiveForm */
?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'decretocaracterizacion-form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>false,
)); ?>

    <p class="note">Campos con <span class="required">*</span> son requeridos.</p>

    <?php echo $form->errorSummary($dec); ?>

    <div class="row">
        <?php echo $form->labelEx($dec,'decreto_id'); ?>
        <?php echo $form->dropDownList($dec,'decreto_id',CHtml::listData(Decreto::model()->findAll(),'id','ndecreto'), array('empty'=>'Seleccione decreto', 'value'=>'0')); ?> <p class="note">Valor por defecto "0"</p>
        <?php echo $form->error($dec,'decreto_id'); ?>
    </div>


    <div class="row">
        <?php echo $form->labelEx($dec,'caracterizacion_id'); ?>
        <?php echo $form->textField($dec, 'caracterizacion_id', array('readOnly'=>'true', 'value'=>$car->id)); ?>
        <?php echo $form->error($dec,'caracterizacion_id'); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($dec->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

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

</div><!-- form -->
这里我想要的是,我不想复制decreto_id,即使我看到它没有被复制,我在DB中看到它被复制,但不知道为什么它没有显示在视图中

更新:有一个特征可以有多个Decreto,但不能在一个特征中有相同的Decreto

模型


你可以随时检查任何你认为是错误的东西,返回错误,并在保存过程的任何步骤中停止该过程

我更愿意使用和检查一些列完全相同的现有记录

你也可以定制

例如:

public function beforeValidare()
{
    $criteria = new CDbCriteria();
    $criteria->addCondition('....'); // add conditions to meet your requirements

    if(MyModel::model()->exists($criteria)) // check if records with those conditions exists
        return false; // do this to break the chain

    return parent::beforeValidate(); // don't forget this line
}

你能给我发封信或打个例子吗?。。我是新来的,我想我的病情会有所好转?。请记住,1个特征可以有许多法令,也可以有另一个特征可以有几乎相同的法令。如果是这样的话,它将是decreto_id,caracterizacion_id,对吗?您在模型中尝试过唯一的验证规则吗
public function beforeValidare()
{
    $criteria = new CDbCriteria();
    $criteria->addCondition('....'); // add conditions to meet your requirements

    if(MyModel::model()->exists($criteria)) // check if records with those conditions exists
        return false; // do this to break the chain

    return parent::beforeValidate(); // don't forget this line
}