如何验证我的数据库中是否有重复记录?

时间:2014-11-09 13:56:37

标签: php mysql yii

我是Yii的新手,我正在预订房间。

我的系统已经保存了数据库中用户提供的数据。现在,我正在研究如何在数据库中查找重复记录。

我该怎么办?我从哪里开始?我真的很无能为力。

任何人都可以帮助我吗?如果你愿意,我可以粘贴代码。

编辑: 这是代码。我不确定应该在哪里粘贴,但这里是我的控制器的代码:(我很抱歉,我对Yii和PHP很新。)

   <?php

class ScheduleController extends Controller
{
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2',     meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
public $layout='//layouts/column2';

/**
 * @return array action filters
 */
public function filters()
{
    return array(
        'accessControl', // perform access control for CRUD operations
        'postOnly + delete', // we only allow deletion via POST request
    );
}

/**
 * Specifies the access control rules.
 * This method is used by the 'accessControl' filter.
 * @return array access control rules
 */
public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete'),
            'users'=>array('zalorahradmin', 'admin'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}

/**
 * Displays a particular model.
 * @param integer $id the ID of the model to be displayed
 */
public function actionView($id)
{
    $this->render('view',array(
        'model'=>$this->loadModel($id),
    ));
}

/**
 * Creates a new model.
 * If creation is successful, the browser will be redirected to the 'view' page.
 */

public function actionCreate()
{
    $model=new Schedule;
    $modelscheditem=new SchedItems;

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

    if(isset($_POST['Schedule'], $_POST['SchedItems']))
    {
        $model->attributes=$_POST['Schedule'];
        $modelscheditem->attributes=$_POST['SchedItems'];

        $valid=$model->validate();
        $valid=$modelscheditem->validate() && $valid;

        if($valid)
        {
            $model->save(false);
            $modelscheditem->save(false);
        }

        if($model->save())
            $this->redirect(array('view','id'=>$model->id_schedule));
    }

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

/**
 * Updates a particular model.
 * If update is successful, the browser will be redirected to the 'view' page.
 * @param integer $id the ID of the model to be updated
 */

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

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

    if(isset($_POST['Schedule']))
    {
        $model->attributes=$_POST['Schedule'];

        if($model->save())
            $this->redirect(array('view','id'=>$model->id_schedule));

    }

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

/**
 * Deletes a particular model.
 * If deletion is successful, the browser will be redirected to the 'admin' page.
 * @param integer $id the ID of the model to be deleted
 */

public function actionDelete($id)
{
    $this->loadModel($id)->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
    if(!isset($_GET['ajax']))
        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}

/**
 * Lists all models.
 */

public function actionIndex()
{
    $dataProvider=new CActiveDataProvider('Schedule');
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

/**
 * Manages all models.
 */

public function actionAdmin()
{
    $model=new Schedule('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['Schedule']))
        $model->attributes=$_GET['Schedule'];

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

/**
 * Returns the data model based on the primary key given in the GET variable.
 * If the data model is not found, an HTTP exception will be raised.
 * @param integer $id the ID of the model to be loaded
 * @return Schedule the loaded model
 * @throws CHttpException
 */

public function loadModel($id)
{
    $model=Schedule::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,'The requested page does not exist.');
    return $model;
}

/**
 * Performs the AJAX validation.
 * @param Schedule $model the model to be validated
 */

protected function performAjaxValidation($model)
{
    if(isset($_POST['ajax']) && $_POST['ajax']==='schedule-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
}

}

2 个答案:

答案 0 :(得分:1)

您可以在模型中使用Unique验证程序。我们假设您的username模型中有一个名为Schedule的字段。您可以检查它是否存在于数据库中,如下所示:

 public function rules(){
     return array(
          array('username', 'unique', 'className' => __CLASS__,'skipOnError'=>false),
          //other rules
     );
 }

因此,如果您尝试插入新记录,它将检查数据库中是否存在记录。如果是,则向用户显示错误,插入操作不会执行。

答案 1 :(得分:0)

您应该在模特身上使用exist : CExistValidator

请在此处阅读更多内容:http://www.yiiframework.com/wiki/56/reference-model-rules-validation/