Konstrukcja elokwentny modelu Laravel

mam własny seter, który uruchamiam w __construct metoda na mojego modelu.

to właściwość, którą chcę zainstalować.

    protected $directory;

Mój 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;
        }
    }

mój problem polega na tym, że wewnątrz mojego setter$this->student_id (który jest atrybutem modelu, pobierane z bazy danych) zwraca null. Kiedy Ja ... --6--> od wewnątrz mojego seter zauważam, że mój #attributes:[] jest pustą tablicą.
W ten sposób atrybuty modelu instalowane po __construct() zwolniony. Jak mogę zainstalować mój $directory atrybut w moim metodzie budowania?


musisz zmienić swój projekt na:

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

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

pierwszy wiersz (parent::__construct()) będzie działać wymownym Modelwłasny metoda budowy przed uruchomieniem kodu, który skonfiguruje wszystkie atrybuty dla ciebie. Ponadto, zmiana sygnatury metody konstruktora powinna nadal wspierać wykorzystanie, który oczekuje Laravel:$model = new Post(['id' => 5, 'title' => 'My Post']);

zasadą jest naprawdę polega na tym, aby zawsze pamiętać przy rozszerzaniu klasy, aby sprawdzić, że nie ma nadpisać istniejący metoda, aby on już nie działa (jest to szczególnie ważne z magią __construct,__get, etc. Metody.) Można sprawdzić źródło pliku źródłowego, aby dowiedzieć się, czy zawiera on metody, które można zdefiniować.