Datenbankabfragen Bevorsave

Hallo zusammen,

ich bin neu im Thema yii und habe noch nicht alle features durch.

Ich habe eine Tabelle Termine mit folgenden Feldern:

id, datum, startzeit, endzeit, mitarbeitername, kundenname,…

Angenommen, ich habe in der _form einen create Button.

Nun soll vor dem Speichern (Create oder Update) geprüft werden, ob es es

schon einen entsprechenden Termin für den Mitarbeiter am gleichen Tag gibt.

Mein erster Gedanke war, dass ich die bevorsave Methode der Klasse Termine überschreibe

und Prüfungen durchführe und dann die Speicherung veranlasse oder über eine Fehlermeldung blockiere.

Hat jemand eine Ahnung wie das in yii funktionieren könnte ? Eventuell mit Criterium alla


	protected function beforeSave()

	{

	    //Konvert German Date into MySQL Date

	    $this->Datum = strtotime ($this->Datum);

        $this->Datum = date ('Y-m-d', $this->Datum);	

		

		$datumc = $this->Datum;

	    $mitarbeiterc = $this->Mitarbeiter;

		$startzeitc = $this->Startzeit;

		$endzeitc = $this->Endzeit;

		$ok = checkTerminvalide($datumc,$mitarbeiterc,$startzeitc,$endzeitc)

	

		if(parent::beforeSave()){	

	

			return TRUE;

		}

		else return false;

	}

	

	public function checkTerminvalide($datumc,$mitarbeiterc,$startzeitc,$endzeitc){


	$criteria=new CDbCriteria;

	$criteria->select='Datum','Mitarbeiter','Startzeit','Endzeit';  // Nur die 'title' Spalte wird ausgewählt

	$criteria->condition='Datum=:{$datumc}','Mitarbeiter=:{$mitarbeiterc}';

	$criteria->params=array(':startzeit'<{$startzeitc},':startzeit'>{$endzeitc},':endzeit'<{$startzeitc},':startzeit'>{$endzeitc});

	$post=Termin::model()->find($criteria); // $params ist nicht nötig

 return irgendeine Variable oder Record

	

	}

Ich weiss auch noch nicht, wie ich die Start- und Endzeiten so über Criteria vergleiche, dass hier eine sinnvolle Abfrage dabei herauskommt. Hat irgendwer eine Ahnung wie man das machen könnte?

Brächte dringend Hilfe ! :)

Gruß

ich würde eine Validator-methode oder einen Validator schreiben

http://www.yiiframework.com/doc/guide/1.1/en/form.model#declaring-validation-rules

http://www.yiiframework.com/doc/api/1.1/CValidator

Hallo und Danke,

ich habe es nun mit einer Validatormethode versucht, die ich in eine Klasse

TerminValidator extends CBehavoir gepackt habe.

Die rufe ich aus dem Controller heraus auf und prüfe erst einmal

ob schon Termine drin sind. Das klappt auch.

Ich suche noch nach Möglichkeiten, wie ich in yii einen Dialog anzeigen kann

also so etwas wie eine MessageBox unter C# oder VB6.

Hab da was von setFlash gelesen. Komme ich damit weiter?

Ich würde mir (zum Debuggen) gerne mal Werte anzeigen lassen. ::)

Gruß

Wenn das klappt, gut. Aber:

  • ein model validiert sich quasi selbst ($model->validate()), das brauch der controller eigentlich nicht tun.

  • ein Validator erbt mindestens von CValidator oder ist eine methode im model

Hallo, wickedsmith

welche Dialog du brauchst eigentlich? Willst du nur zeigen Nutzer irgendwelche Information, oder willst du gewisse Information bekommen?

Du kannst nutzen setFlash(), jQuery Dialog plugin, javascript alert() function, falls du willst Benutzer zu berichten.

Falls du zusätzliche Information von Benutzer brauchst, du kannst jQuery Dialog plugin oder javascript promt() function.