Lean Mapper Query este un concept de obiect de interogare pentru biblioteca Lean Mapper care ajuta la construirea de interogari complexe folosind imbinari automate ( idee preluata din biblioteca NotORM ). Uita-te la clasele de baza sugerate. Pentru documentatia ceha, aruncati o privire la wiki.

Caracteristici

  • se comporta ca un preprocesor SQL, prin urmare majoritatea expresiilor SQL sunt disponibile
  • imbinari automate folosind notatia punct (@ book.tags.name)
  • abilitatea de a interoga depozite sau entitati
  • suport pentru filtre implicite

Instalare

Poate fi instalat prin Composer.

compozitor necesita mbohuslavek / leanmapper-query

Ce face?

Sa presupunem ca avem urmatoarele depozite:

class BaseRepository extinde LeanMapper \ Repository {functie publica find (IQuery $ interogare) {$ this-> createEntities ($ query -> applyQuery ($ this-> createFluent (), $ this-> mapper) -> fetchAll ()); }} clasa BookRepository extinde BaseRepository {}

si urmatoarele entitati:

/ ** * @property int $ id * @property string $ name * / class Tag extinde LeanMapper \ Entity {} / ** * @property int $ id * @property Author $ author m: hasOne * @property Tag [] $ etichete m: hasMany * @property DateTime $ pubdate * @property string $ name * @property bool $ available * / class Book extends LeanMapper \ Entity {} / ** * @property int $ id * @property string $ name * @property Carte [] $ carti m: belongToMany * / class Author extinde LeanMapper \ Entity {}

Construim o interogare :

$ query = new LeanMapperQuery \ Query; $ interogare-> unde (‘@ author.name’, ‘Karel’);

Acum, daca dorim sa obtinem toate cartile al caror autor este numele Karel, trebuie sa facem acest lucru:

$ bookRepository = nou BookRepository (…); $ carti = $ bookRepository-> find ($ interogare);

Interogarea bazei de date va arata astfel:

Selectati [carte]. * DIN [carte] LEFT JOIN [author] ON [book]. [Author_id] = [author]. [Id] WHERE ([author]. [Name] = ‘Karel’)

Puteti vedea ca efectueaza imbinari automate prin notatia punct . Accepta toate tipurile de relatii cunoscute de Lean Mapper .

Este foarte usor de utilizat functiile SQL. Putem actualiza interogarea astfel:

$ interogare-> unde (‘DATE (@pubdate)>% d’, ’01-01 1998′); $ carti = $ bookRepository-> find ($ interogare);

care schimba interogarea bazei de date in urmatoarele:

SELECTEAZA [carte]. * DIN [carte] LEFT JOIN [author] ON [book].

masturbaciones incesto lesbianas
comicxxx mujeres tetudas
mamadas por dinero peliculas porno gay españolas
abuela follando con joven porno rural
pepe porno peliculas porno de incesto gratis
me follo a la madre de mi amigo abuelas incestos
trio bisex me follo a la madre de mi amigo
porno forzado masajes eroticos con final feliz
ultimos videos faking peliculas españolas porno
parejitas españolas follando masturbacion en grupo
maduras por dinero porno madre hijo español
venezolanas maduras porno vitange
madresxxx coños por dentro
follando en el monte se follaron a mi mujer
coños peludos rubios follando en canarias
madres haciendo pajas a sus hijos incestos jovencitas
milf squirt descargar peliculas porno completas
incesto abuelas nenas follando
maduras comiendose el coño se corre en el coño de su madre
pajas en la playa esposas compartidas

[Author_id] = [author]. [Id] WHERE ([author]. [Name] = ‘Karel’) AND (DATA ([ carte]. [data publicarii])> „01.01.1998”)

Nu te repeta

Puteti extinde clasa Query si puteti defini propriile metode.

clasa BookQuery extinde LeanMapperQuery \ Query {public function restrictAvailable () {$ this-> where (‘@ available’, true) -> orderBy (‘@ author.name’); returneaza $ asta; }} ///////// $ query = new BookQuery; $ query-> restrictAvailable (); $ carti = $ this-> bookRepository-> find ($ interogare);

Interogarea entitatilor

De asemenea, este posibil sa interogati o proprietate de entitate ( in prezent doar acele proprietati cu relatii BelongsToMany sau HasMany ). Sa facem clasa BaseEntity:

clasa BaseEntity extinde LeanMapperQuery \ Entity {protected static $ magicMethodsPrefixes = array (‘find’); functie protejata gasi ($ camp, IQuery $ interogare) {$ entitati = $ this-> queryProperty ($ camp, $ interogare); returneaza $ this-> entityFactory-> createCollection ($ entity); }} / * * … * / class Book extinde BaseEntity {}

Retineti ca BaseEntity trebuie sa extinda LeanMapperQuery \ Entity pentru a face posibil urmatoarele.

Am definit metoda de cautare ca fiind protejata, deoarece prin specificarea numelui metodei in proprietatea $ magicMethodsPrefixes, puteti interoga astfel de entitati:

$ carte; // instanta preluata anterior a unei entitati dintr-un depozit $ query = new LeanMapper \ Query; $ interogare-> unde (‘@ nume! =’, ‘carte electronica’); $ tags = $ book-> findTags ($ interogare);

Metoda magica findTags va apela in cele din urma metoda dvs. protejata cu „etichete” ca primul argument.

Interogarea rezultata a bazei de date arata astfel:

SELECTEAZA [eticheta]. * DIN [eticheta] UNDE [eticheta]. [Id] IN (1, 2) SI ([eticheta]. [Nume]! = ‘Carte electronica’)

Prima conditie din clauza where, [tag]. [Id] IN (1, 2), este preluata de la entitatea care traverseaza ( etichetele sunt interogate impotriva propriilor tag-uri ale acestei entitati de carte ).

Ce mai poti face?

Daca modificam usor BaseRepository si BaseEntity, putem simplifica lucrul cu obiecte de interogare. Pentru a realiza acest aspect, priviti la clasele de baza sugerate . Face posibil urmatoarele.

$ books = $ bookRepository-> query () -> where (‘@ author.name’, ‘Karel’) -> where (‘DATE (@pubdate)>?’, ‘1998-01-01’) -> gasi (); // sau … $ tags = $ book-> queryTags () -> where (‘@ name! =’, ‘ebook’) -> find ();

Licenta

Copyright (c) 2013 Michal Bohuslavek

Licentiat sub licenta MIT.