2017-01-02 3 views
2

Ich habe ein BLOB-Feld auf DB, die komprimierte Daten enthält.Laravel - Modellklasse, überschreiben Hauptmethoden

Ich brauche zu komprimieren/dekomprimieren transparent zu sein und Benutzerklasse müssen nicht schreiben:

$objModel->field = gzencode($objModel->field); 
$objModel->field = gzdecode($objModel->field); 

Zum Speichern ich es bekam, zwingende Speichermethode:

public function save($attributes[] = null) { 
    $this->field = gzencode($objModel->field); 
    return parent::save($attributes);  
} 

Aber wenn ich erholen Daten aus DB ich nicht zu GZDECODE "transparent", ich habe versucht, Boot, __call, __callstatic und andere, aber nicht erfolgreich übersteuert.

Kann mir jemand sagen, welche Methode Daten von DB wiederherstellt und das Modellobjekt füllt, damit ich es überschreiben und gzdecode machen kann?

Vielen Dank.

Antwort

5

Ich würde nicht empfehlen, Sie überschreiben Eloquent Methoden. Nur accessor verwenden:

public function getFieldAttribute($value) 
{ 
    return gzdecode($value); 
} 

Und mutator:

public function setFieldAttribute($value) 
{ 
    $this->attributes['field'] = gzencode($value); 
} 
+1

Vielen Dank @ alexey-mezenin! Ich sah diese, aber ich las zu viel schnell und bemerkte nicht "wird automatisch angerufen". Deine Antwort hat mir wirklich geholfen. Schöne Grüße! –

Verwandte Themen