2016-04-20 7 views
0

Ich versuche, einen Wert in einem Konstruktor von Modellen in Laravel 5.2 abzurufen, zu konvertieren und zu speichern. Der Grund dafür ist, dass es in der Datenbank als hex gespeichert ist, und ich es ziemlich oft in binary konvertieren muss, und möchte es einmal tun und das Ergebnis in einem Klassenattribut speichern. Aber ich kann nicht in der Lage sein, den Wert von $this im Konstruktor abzurufen.Zugreifen auf einen Datenbankwert in einem Modellkonstruktor in Laravel 5.2

Hier ist ein Auszug von dem, was ich arbeite, Guid ist ein Feld in meiner Tabelle.

class Person extends Model { 
    private $bGuid = null; 

    public function __construct(array $attributes = []) { 
      parent::__construct($attributes); 
      $this->ad = Adldap::getProvider('default'); 
      $this->bGuid = hex2bin($this->guid); 
     } 

    public function getName(){ 
     $query = $this->ad->search()->select('cn')->findBy('objectGUID', $this->bGuid); 
     return $query['attributes']['cn'][0]; 
    } 
} 

Das $this->ad Attribut führt wie erwartet, aber $this->bGuid nicht. Ein Debugging zeigt, dass $this->guid, wenn im Konstruktor verwiesen wird, null zurückgibt. Während wenn in der getName() Methode direkt direkt funktioniert funktioniert gut.

Meine Zwischenlösung erstellt eine neue Funktion und ruft einfach $this->getbGuid(), so dass ich ein bisschen mehr zufrieden mit dem DRY-Ness, aber es muss es immer noch jedes Mal konvertieren, wenn es aufgerufen wird.

würde ich es begrüßen, wenn mir jemand sagen könnte, was falsch läuft, so kann ich den Code :)

Antwort

2

Versuchen verbessern andere Methode von Modell außer Kraft zu setzen: newFromBuilder(). Dies ist die eine, die ausgeführt wird, wenn die Daten aus der DB abgerufen wird, nicht die __construct() ein:

class Person extends Model { 
    private $bGuid = null; 

    public function newFromBuilder($attributes = [], $connection = null) 
    { 
     $model = parent::newFromBuilder($attributes, $connection); 

     $model->bGuid = hex2bin($model->guid); 

     return $model; 
    } 
} 

Beachten Sie, dass in der überschriebenen Methode Sie auf das Objekt als $model beziehen (statt $ this), und es muss das $model Objekt am Ende zurückgeben.

+0

Danke für die Antwort! Es tut mir leid zu sagen, dass mein Projekt schon lange vorbei ist, aber ich schätze die Informationen. Ich habe die Quelldateien nicht griffbereit, aber es würde auf jeden Fall erklären, warum das Einfügen in den Konstruktor nicht funktioniert hat. (Und Entschuldigung für meine verzögerte Antwort) –

+0

Verdienen mehr Upvotes! Vielen Dank! – user3396065