Skip to content
Eloquent ORM in Laravel - ghid pentru incepatori

Eloquent ORM în Laravel – ghid pentru începători

Eloquent ORM în Laravel – ghid pentru începători. Eloquent este sistemul ORM (Object-Relational Mapping) inclus implicit în Laravel, frameworkul PHP cel mai popular la nivel mondial.

ORM-ul permite lucrul cu baza de date folosind obiecte PHP în loc de interogări SQL directe, abstractizând complexitatea bazei de date relaționale și permițând scrierea unui cod mai curat, mai ușor de înțeles și mai simplu de întreținut.

Filosofia Eloquent ORM se bazează pe convenții clare: fiecare tabel din baza de date corespunde unui Model PHP, fiecare rând din tabel este o instanță a acelui Model, iar Eloquent știe automat care tabel corespunde căruia Model fără configurare explicită.

Această abordare reduce dramatic codul repetitiv și permite focusul pe logica de business în loc de SQL boilerplate.

Crearea modelelor și operații CRUD

Un Model Eloquent este o clasă PHP care extinde clasa de bază Illuminate\Database\Eloquent\Model. Crearea se face rapid prin comanda Artisan: php artisan make:model NumeModel.

Proprietăți importante ale modelului

Proprietatea $fillable definește care câmpuri pot fi populate prin atribuire în masă, o funcție de securitate care previne atacurile de tip mass assignment injection. Alternativ, $guarded specifică câmpurile excluse, lăsând restul accesibile.

Proprietatea $casts permite convertirea automată a valorilor din baza de date în tipuri PHP native: câmpuri JSON decodate automat în array PHP, câmpuri de dată returnate ca instanțe Carbon, valori 0/1 convertite în boolean.

Citirea datelor

Metoda all() returnează toate înregistrările din tabel ca o colecție Eloquent. Metoda find($id) returnează înregistrarea cu ID-ul specificat sau null dacă nu există. findOrFail($id) returnează înregistrarea sau aruncă o excepție gestionată automat ca răspuns HTTP 404.

Pentru interogări complexe se înlănțuiesc metode pe Builder-ul Eloquent: where() pentru filtrare, orderBy() pentru sortare, limit() și offset() pentru paginare, select() pentru specificarea câmpurilor returnate.

Filtrarea la nivel de interogare cu where() este întotdeauna mai eficientă decât filtrarea colecției cu filter() pentru seturi mari de date. Înțelegerea diferenței dintre operațiile Query Builder (SQL) și cele Collection (PHP) este esențială pentru performanță.

Crearea, actualizarea și ștergerea datelor

Metoda create() acceptă un array de date și creează o nouă înregistrare în baza de date, returnând instanța modelului. firstOrCreate() caută o înregistrare cu atributele date și o creează dacă nu există. updateOrCreate() actualizează înregistrarea existentă cu valorile suplimentare specificate.

  • Actualizarea: încarcă modelul, modifică proprietățile și apelează save()
  • Actualizare în masă: metoda update() aplicată direct pe o interogare
  • Ștergerea: metoda delete() pe o instanță sau destroy($id) ca metodă statică
  • Soft Delete: marchează înregistrările ca șterse fără ștergere fizică, restaurabile prin restore()

Relații între modele și funcții avansate

Una dintre cele mai puternice funcții ale Eloquent este gestionarea relațiilor dintre modele, care corespund relațiilor din baza de date relațională.

Relația One-to-Many

O relație one-to-many se definește prin metoda hasMany() în modelul părinte și belongsTo() în modelul copil. De exemplu, un Utilizator hasMany Articole, iar fiecare Articol belongsTo un Utilizator.

Eager loading prin with(‘articole’) preîncarcă relația eficient, prevenind problema N+1 queries care apare la accesarea relațiilor în buclă. Aceasta este una dintre cele mai frecvente probleme de performanță în aplicațiile Laravel.

Relația Many-to-Many

Relațiile many-to-many necesită un tabel pivot intermediar. Eloquent gestionează automat tabelul pivot dacă respectă convenția de denumire (numele celor două tabele în ordine alfabetică, separate prin underscore).

Metodele attach(), detach() și sync() simplifică gestionarea înregistrărilor din tabelul pivot fără SQL direct, reducând codul boilerplate la minimum.

Query scopes și colecții Eloquent

Scopes permit încapsularea logicii de filtrare frecvent folosite în modelul însuși, evitând duplicarea codului în controllere și servicii. Un local scope este o metodă în model cu prefixul „scope” urmată de numele scope-ului.

  • Local scopes: apelate explicit, ex. Model::activ()->get()
  • Global scopes: aplicate automat la toate interogările unui model
  • Utile pentru filtrarea automată în aplicații multi-tenant
Colecțiile Eloquent oferă zeci de metode funcționale pentru transformarea și filtrarea datelor: map(), filter(), reduce(), groupBy(), sortBy(), pluck() și altele, toate realizate în memorie PHP fără SQL suplimentar.

Paginarea rezultatelor

Eloquent include suport nativ pentru paginare prin metodele paginate() și simplePaginate(). Prima generează paginare cu numere de pagini și link-uri complete, a doua generează paginare simplă cu butoane „Anterior” și „Următor”, mai eficientă pentru seturi mari de date.

Obiectul de paginare returnat include automat toată logica de construire a URL-urilor și poate fi randat direct în view-uri Blade cu metoda links(). Eloquent ORM este una dintre componentele care fac Laravel atât de productiv în dezvoltarea aplicațiilor PHP. Complementează cunoștințele cu autentificarea în Laravel și securizarea aplicațiilor PHP. Contactează-ne pentru proiecte Laravel.

Back To Top