2014-11-09 5 views
0

Я очень новичок в Yii, и я делаю систему бронирования номеров.Как проверить, существует ли дублирующая запись в моей базе данных?

Моя система уже сохраняет данные, данные пользователями в моей базе данных. Теперь мне очень трудно исследовать поиск дубликатов записей в базе данных.

Как это сделать? С чего начать? Я действительно невежественный.

Может ли кто-нибудь мне помочь? Я могу вставить коды, если вы хотите.

EDIT: Вот код. Я не уверен, какой из них я должен вставить здесь, но вот коды от моего контроллера: (Я очень сожалею, что я действительно новичок в 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(); 
    } 
} 

}

+0

Если вы показываете свои усилия или код, который будет полезен при ответе. –

+0

Я уже вставил коды, @Odedra – Vincent

ответ

1

Вы можете использовать Unique валидатор в вашей модели. Предположим, что у вас есть поле, которое называется username в вашей модели Schedule. Вы можете проверить, является ли существует в базе данных или не так, как показано ниже:

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

Таким образом, если вы попытаетесь вставить новую запись, она будет проверять, существует ли запись в базе данных или нет. Если да, это показывает ошибку пользователю, и операция вставки не будет выполняться.

+0

Хорошо, если я хочу проверить многократные поля, могу ли я сделать это? public function rules() { return array ( array ('username', 'password', 'unique', 'className' => __CLASS __, 'skipOnError' => false), // другие правила ); } – Vincent

+0

@ Vincent Да, вы можете это сделать, просто: '' имя пользователя, пароль ',' unique ',' className '=>' ', ... ' –

Смежные вопросы