Laravel 4 Model Events: Popularea dinamica a coloanelor la insert/update

Created at: iulie 23, 2014; Last update: iulie 23, 2014

Cand trebuie sa creez o zona de administrare, de cele mai multe ori doresc sa stiu nu doar cand un utilizator a creat sau editat un item (o postare), ci si cine este acel utilizator.

Luand in considerare aceasta nevoie, de fiecare data adaug doua coloane aditionale la tabelele din baza de date: created_by si updated_by. Acestea, impreuna cu timestamp-urile Laravel, sunt cea mai buna metoda de a urmari cele mai recente schimbari realizate unei inregistrari din baza de date.

In trecut, cand voiam sa creez/updated o postare scriam ceva de genul:

Dupa cum poti vedea, cand am creat o postare, am adaugat linia $post->created_by = Auth::id();. La fel se va intampla si in cazul unui update: $post->updated_by = Auth::id();.

Toate bune si frumoase. Dar daca exista o cale mai usoara de a face acelasi lucru, la fel cum Laravel adauga timestamp-uri la fiecare insert sau update?

Si se pare ca exista o astfel de cale. Folosindu-ne de Model events al Laravel, poti foarte usor sa adaugi automat valori unei inregistrari la insert sau update:

“Eloquent models fire several events, allowing you to hook into various points in the model’s lifecycle using the following methods: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored.”

OK. Deci, putem modifica modelul astfel incat la crearea sau updatarea unei inregistrari sa populam anumite coloane.

Considerand ca avem un model Post, putem insera o metoda boot unde sa inseram event-urile. Sa trecem la treaba:

Acum, cand creez/updatez o postare, modelul va introduce automat id-ul meu in tabel.

Lasă un răspuns

Your email address will not be published. Required fields are marked *

No spam? * Time limit is exhausted. Please reload CAPTCHA.