Yii „NULL“ in date fields

Nunja es ist mal wieder ein Tag mit einem neuen Problem und was soll ich sagen die Lösung war mal wieder einfacher als gedacht und dennoch Frickelei!

Heute: NULL in date Feldern der Datenbank mit Yii und wie man das verarbeitet =)

Ich wollte in bestimmten date Feldern der Datenbank einfach nichts also NULL stehen haben. Nun produziert Yii leider korrekte date Objekte wenn man in die DB schreibt und somit steht dann dort 0000-00-00 00:00:0. Kein Problem dafür gibts ne lösung in Form von bevoreSave() und afterFind() im Yii Modell. sieht dann so aus

	/**
	 * @return array behaviours.
	 */
	public function beforeSave() {

	    // Convert time from input field to datetime
	    $this->finished_until = ($this->finished_until != null) ? date("Y-m-d H:i:s", CDateTimeParser::parse($this->finished_until,'dd.mm.yyyy')) : new CDbExpression('NULL');
	    $this->finished_on = ($this->finished_on != null) ? date("Y-m-d H:i:s", CDateTimeParser::parse($this->finished_on,'dd.mm.yyyy')) : new CDbExpression('NULL');

	    return parent::beforeSave();
	}

	/**
	 * @return array behaviours.
	 */
	public function afterFind() {

	    // Convert time for use in an input field from datetime
	    $this->finished_until = ($this->finished_until != null) ? date("d.m.Y", CDateTimeParser::parse($this->finished_until,'yyyy-MM-dd hh:mm:ss')) : null;
	    $this->finished_on = ($this->finished_on != null) ? date("d.m.Y", CDateTimeParser::parse($this->finished_on,'yyyy-MM-dd hh:mm:ss')) : null;

	    return parent::afterFind();
	}

und für die Ausgabe kann dann das verwendet werden

<?php echo CHtml::encode(($model->finished_until) ? $model->finished_until : Yii::t('app', 'Date not Set')); ?>
<?php echo CHtml::encode(($model->finished_on) ? $model->finished_on : Yii::t('app', 'Date not Set')); ?>

Happy Coding!

greez Frank

 

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.