Un pachet laravel care utilizeaza intreaga putere a relatiilor pentru a crea imbinari automate si a efectua filtrarea avansata.

Avand in vedere, de exemplu, doua modele Office si Employee, puteti transforma un sir de genul acesta „employee.name ct ‘Mario Rossi’ sau employee.name ct ‘Giacomo’” intr-o interogare sql ca aceasta

selectati birouri. * din „birouri” la stanga alaturati „angajatilor” ca „angajati” pe „angajati”. „office_id” = „birouri”. „id” unde („angajati”. „nume” le place? sau „angajati”.) nume` ca?)

Functii:

  • Alatura-te automat relatiilor tale
  • Interogare filtru cu expresie logica complexa lara-eye
  • Atasati relatii dinamice fara a atinge codul folosind relativitatea elocventa

Cerinte

PHP 7.2 si laravel 5.8

Instalare

Puteti sa-l instalati prin Composer tastand urmatoarea comanda:

compozitor necesita railken / eloquent-mapper

Utilizare

Pentru a utiliza aceasta biblioteca aveti nevoie de o harta.

Creati o noua clasa oriunde doriti, cum ar fi urmatorul exemplu

app / Map.php

App spatiu de nume; utilizati Railken \ EloquentMapper \ Map ca BaseMap; class Map extinde BaseMap {/ ** * Returneaza o matrice cu toate modelele pe care vrei sa le mapezi * * @return array * / public function models (): array {/ ** return [\ App \ Models \ User :: class]; ** /}}

Modelele metodei trebuie sa returneze o lista cu toate modelele. Puteti adauga chiar si modele care se afla in folderul furnizorului dvs., indiferent de logica pe care o utilizati, trebuie doar sa returnati o matrice.

Railken \ EloquentMapper \ Map are, de asemenea, maparea relatiilor si a atributelor pe baza modelului, daca doriti, puteti suprascrie acea functionalitate si scrie propria dvs. Verificati sursa

Aceste metode sunt invocate numai atunci cand apelati comanda artisan mapper: generate (a se vedea mai jos) si rezultatul va fi stocat in cache intr-un fisier plasat in bootstrap / cache / map.php.

Aceasta inseamna ca puteti efectua orice logica doriti pentru a prelua toate modelele (de exemplu, scanarea fisierelor), asa ca nu va faceti griji cu privire la cache.

peliculas porno gay en español porno gratis anal
mama me folla me follo a mi madrastra
chicas altas follando rusas desnudas
videos de lucio saints maduras en grupo
viejas cachondas orgias rusas
comic maduras videos actrices españolas desnudas
mi vecina me folla chicas corriendose a chorros
peliculas porno castellano sobar tetas
videos porno tetonas gratis follando en tenerife
tias cachondas tetas en publico
porno viejas en español porno español años 70
orgias amateur pollas corriendose
me follo a mi madre videos x incesto
corridas internas peludas mi mujer follando
videos ponos abuelas ardientes
tias corriendose transexual española follando
coñosxxx mamadas por dinero
follando despues de la fiesta maria patiño desnuda
porno casero real español milfs españolas
incesto asiatico mamada a caballo

Important : Pentru a fi detectate, toate relatiile trebuie sa returneze tipul Illuminate \ Database \ Eloquent \ Relations \ Relation astfel:

App spatiu de nume; utilizati Illuminate \ Database \ Eloquent \ Relations \ BelongsTo; clasa Foo extinde Modelul {/ ** * @return \ Illuminate \ Database \ Eloquent \ Relations \ BelongsTo * / public function bar (): BelongsTo {return $ this-> belongTo (Bar :: class); }}

Acum este timpul sa inregistrati aceasta clasa la orice furnizor pentru a o suprascrie pe cea implicita.

app / Providers / AppServiceProvider.php

spatiu de nume App \ Providers; utilizati Illuminate \ Support \ ServiceProvider; utilizati App \ Map; utilizati Railken \ EloquentMapper \ Contracts \ Map ca MapContract; class AppServiceProvider extinde ServiceProvider {/ ** * @inherit * / public function register () {$ this-> app-> bind (MapContract :: class, Map :: class); }}

Artizan

Exista o singura comanda si este cartograf artizan: genereaza. Aceasta comanda va remapa si va rechaja, asa ca retineti ca trebuie sa o executati oricand va schimbati modelele de cod.

Daca utilizati modele care se afla in folderul furnizorului dvs., il puteti adauga in composer.json pentru a reincarca de fiecare data cand bibliotecile sunt actualizate.

{“scripts”: {“post-autoload-dump”: [“@php artisan mapper: generate”]}}

Filtrare

Sa semene cum functioneaza filtrarea?

utilizati Railken \ EloquentMapper \ Scopes \ FilterScope; utilizati Railken \ EloquentMapper \ With \ WithCollection; utilizati Railken \ EloquentMapper \ With \ WithItem; utilizati App \ Models \ Foo; $ foo = nou Foo; $ query = $ foo-> newQuery (); $ filter = “created_at> = 2019”; $ scope = new FilterScope; $ scope-> apply ($ interogare, $ filtru, nou WithCollection ([new WithItem (‘bar’)]));

Si asta e! $ interogare este acum filtrata, daca Foo are relatii, puteti utiliza notatia punct si filtrul va efectua automat unirea. De exemplu, daca Foo are o relatie numita tag-uri si doriti sa recuperati toate Foo cu numele tag-ului myCustomTag pur si simplu utilizati tag.name = ‘myCustomTag’.

Iata sintaxa completa

Al treilea parametru este optiunea de incarcare dornica. Puteti utiliza, desigur, notatia punct si puteti adauga subinterogare. De exemplu, urmatorul exemplu prezinta o lista cu toti autorii care contine numele Mario si returneaza toate cartile lor care au un tag.name numit sci-fi.

utilizati Railken \ EloquentMapper \ Scopes \ FilterScope; utilizati Railken \ EloquentMapper \ With \ WithCollection; utilizati Railken \ EloquentMapper \ With \ WithItem; utilizati Railken \ EloquentMapper \ Tests \ Models \ Author; $ autor = autor nou; $ query = $ author-> newQuery (); $ filter = “nume ct ‘Mario'”; $ scope = new FilterScope; $ scope-> apply ($ interogare, $ filtru, nou WithCollection ([nou WithItem (‘carti’, ‘tag.name eq “stiinta-fictiune”‘)]));

Tamplar

Aceasta este o clasa interna utilizata de FilterScope pentru a uni relatiile necesare inainte de a efectua filtrarea, dar o puteti folosi independent. vezi teste

Exemplu – Configurare

Sa continuam cu un exemplu real, mai intai setarea. Vom folosi doua modele: Birou si Angajat

app / Models / Office.php

spatiu de nume App \ Models; utilizati Ilumineaza \ Baza de date \ Elocvent \ Model; utilizati Ilumineaza \ Baza de date \ Elocvent \ Relatii \ AreMulte; clasa Office extinde Modelul {/ ** * @var array * / public $ fillable = [‘nume’, ‘descriere’]; / ** * @return \ Illuminate \ Database \ Eloquent \ Relations \ HasMany * / functionarii publici (): HasMany {return $ this-> hasMany (Employee :: class); }}

app / Models / Employee.php

spatiu de nume App \ Models; utilizati Ilumineaza \ Baza de date \ Elocvent \ Model; utilizati Illuminate \ Database \ Eloquent \ Relations \ BelongsTo; utilizati App \ Models \ Office; clasa Angajat extinde Modelul {/ ** * @var array * / public $ fillable = [‘nume’, ‘descriere’, ‘office_id’]; / ** * @return \ Illuminate \ Database \ Eloquent \ Relations \ BelongsTo * / office public office (): BelongsTo {return $ this-> belongTo (Office :: class); }}

app / Map.php

App spatiu de nume; utilizati Railken \ EloquentMapper \ Map ca BaseMap; class Map extinde BaseMap {/ ** * Returneaza o matrice cu toate modelele pe care vrei sa le mapezi * * @return array * / public function models (): array {return [\ App \ Models \ Employee :: class, \ App \ Models \ Office :: class]; }}

Primiti toate birourile care au angajati cu numele Mario Rossi sau Giacomo

utilizati App \ Models \ Office; utilizati Railken \ EloquentMapper \ Scopes \ FilterScope; $ office = birou nou; $ query = $ office-> newQuery (); $ filter = “employee.name ct ‘Mario Rossi’ sau employee.name ct ‘Giacomo'” $ scope = new FilterScope (); $ scope-> apply ($ interogare, $ filter); echo $ query-> toSql ();

Rezultat:

selectati birouri. * din „birouri” la stanga alaturati „angajatilor” ca „angajati” pe „angajati”. „office_id” = „birouri”. „id” unde („angajati”. „nume” le place? sau „angajati”.) nume` ca?)