Vse dela tako kot mora, samo zanima me zakaj dela ;)
Koda je iz tega vodiča https://laracasts.com/series/build-your-first-app-in-laravel/episodes/9
V bazo želimo zapisati združene podaatke iz session + podatke iz request.
Imamo model Notice in NoticesController.
NoticesController.php
public function store(Request $request) {
$this->createNotice($request);
return redirect('notices');
}
private function createNotice(Request $request) {
$data = session()->get('dmca');
$notice = Notice::open($data)->useTemplate($request->input('template'));
return $notice;
\Auth::user()->notices()->save($notice);
}
Notice model
public static function open(array $attributes) {
return new static($attributes);
}
public function useTemplate($template) {
$this->template = $template;
return $this;
}
Zanima me tale koda...
$notice = Notice::open($data)->useTemplate($request->input('template'));
Torej najprej inicializiramo Notice objekt, mu damo argument $data (podatki se pošljejo v _construct in tu se vsebina zapiše v Laravel $attributes polje?), potem poženemo ustvarjeno useTemplate() metodo, katere podatke zapišemo v $this->template = $template; torej lastnost $template. V ozadju pa tudi te podatke Laravel priključi polju $attributes? Verjetno preko setters, ker jasno $template nimamo definirano zato se zažene magic method _set(), ki te podatke (verjetno) zapiše v $attributes? Na koncu pa lepo celotno polje $attributes Laravel uporabi za formacijo query (save()). Si prav predstavljm ali je kje napaka? V vodiču Jeffrey ni šel ravno v preveč detajle.
Seveda je zgornja koda po moje brezveze zakomplicirana, ker bi se dalo vse skupaj enostavno zapisati kot
$notice = session()->get('dmca') + ['template' => $request->input('template')];
kar je tudi prikazano v naslendjem vodiču.