2016-04-17 13 views
0
public function actionCreate() 
{ 
    $model   = new Bookings(); 
    $temp   = new RoomTypes(); 
    $roomtype = $model->room_type; 
    $checkRoomModel = RoomTypes::find()->where(['room_type' => $room_type])->one(); 

    $totalremain = $temp->total_remain; 
    if ($model->load(Yii::$app->request->post())) 
    { 
     if ($checkRoomModel->totalremain > 0) 
     { 
       $imageName = $model->first_name; 
       $mobile  = $model->primary_mobile; 
       $model->file = UploadedFile::getInstance($model, 'file'); 
       $model->file->saveAs('uploads/id_images/' . $imageName . '_' . $mobile . '.' . $model->file->extension); 
       //save the path in the db column 
       $model->id_image = 'uploads/id_images/' . $imageName . '_' . $mobile . '.' . $model->file->extension; 
       $model->save(); 
       Yii::$app->db->createCommand("UPDATE room_types SET total_booked = total_booked + 1 WHERE room_type = '$model->room_type'")->execute(); 
       Yii::$app->db->createCommand("UPDATE room_types SET total_remain = total_remain - 1 WHERE room_type = '$model->room_type'")->execute(); 
      } else { 
       echo "This room Types are full "; 
      } 

      return $this->redirect(['view', 'id' => $model->id]); 
     } 

    } else { 
     return $this->render('create', [ 
      'model' => $model, 
      'temp' => $temp, 
     ]); 
    } 
} 

in der Datenbank zu überprüfen Spalte total_remain ist und total_booked, muss ich vor actioncreate validieren(), die total_remain von $ modell-> ist room_type nicht gleich NullYii2: Wie Zustand vor der Modellerstellung

Wie mach das?

+0

Welches Modell hat die Spalte total_remain und total_booked? – scaisEdge

+0

'RoomTypes()' hat es – JKLM

Antwort

1

Wenn Sie es vor der Aktion ausführen möchten Sie vor der Aktion verwenden können

public function beforeAction($event) 
    { 
     if (parent::beforeAction($action)) { 
       if ($this->action->id == 'create') { 
        $roomModel = RoomTypes::find()->where([ 'room_type' => $room_type ])->one(); 
        if($roomModel->totalremain) > 0) 
        { 
         return false; 
        } 
        else 
        { 
         return true; 
        } 
       } 
     } 
     else 
     { 
      return false; 
     } 
    } 
0

Der einfachste Weg ist eine Auswahl des zugehörigen Modells und dann Sie Code auf der rechten Seite Activiti fahren

public function actionCreate() 
    { 
     $model = new Bookings(); 
     $temp = new RoomTypes(); 
     $checkRoomModel = RoomTypes::find()->where([ 'room_type' => $room_type ])->one(); 
     if ($checkRooModel->totalremain) > 0 { 
       .... 
+0

kann ich Flash-Nachricht vor dem Senden des Formulars festlegen? – JKLM

+0

@ Sie können die Überprüfung auch direkt in der Ansicht durchführen (indem Sie das richtige Benutzungsmodell hinzufügen ... oder Sie können eine Ajax - Validierung durchführen .. .. und dann eine entsprechende Warnung oder Nachricht an den Benutzer aufrufen .. (der Flash wird von sende ..und zeigte, wenn du eine Seite rendest ..) – scaisEdge

+0

kannst du mir bitte mit dem Code helfen, ich muss dies morgen in der Uni einreichen – JKLM