2015-05-28 11 views
5

Mam niestandardowy setter, że jestem uruchomiony w metodzie __construct w moim modelu.A __construct na modelu Eloquent Laravel

To jest nieruchomość, którą chcę ustawić.

protected $directory; 

My Konstruktor

public function __construct() 
    { 
     $this->directory = $this->setDirectory(); 
    } 

Setter:

public function setDirectory() 
    { 
     if(!is_null($this->student_id)){ 
      return $this->student_id; 
     }else{ 
      return 'applicant_' . $this->applicant_id; 
     } 
    } 

Moim problemem jest to, że w moim seter the, $this->student_id (co jest cechą modelu są pobierane z bazy danych) wraca null. Kiedy I dd($this) z poziomu mojego ustawiacza, zauważam, że moja #attributes:[] jest pustą tablicą.
Tak więc atrybuty modelu nie są ustawiane, dopóki nie zostanie uruchomione __construct(). Jak mogę ustawić mój atrybut $directory w mojej metodzie konstruowania?

Odpowiedz

19

Trzeba zmienić konstruktora:

public function __construct(array $attributes = array()) 
{ 
    parent::__construct($attributes); 

    $this->directory = $this->setDirectory(); 
} 

Pierwsza linia (parent::__construct()) uruchomi własną metodę konstruowania Eloquent Model „s przed Twój kod działa, który utworzy wszystkie atrybuty dla Ciebie. Zmiana podpisu metody konstruktora polega również na dalszym wspieraniu użycia, którego oczekuje Laravel: $model = new Post(['id' => 5, 'title' => 'My Post']);

Reguła zawsze polega na tym, aby zawsze pamiętać podczas rozszerzania klasy, aby sprawdzić, czy nie zastąpi ona istniejącej metody, więc że już nie działa (jest to szczególnie ważne w przypadku metod magicznych __construct, __get itd.). Możesz sprawdzić źródło oryginalnego pliku, aby sprawdzić, czy zawiera on zdefiniowaną metodę.

+0

Dokładnie tego potrzebowałem !! Dziękuję Ci –

Powiązane problemy