Instrumente ORM si DB foarte minimaliste pentru PHP
Stiu destul de multe proiecte similare, dar toate nu ma satisfac. Prin urmare, am facut o lista de cerinte pe care ar trebui sa le indeplineasca biblioteca mea perfecta ORM.
- Ar trebui sa fie minuscul. Nu vreau sa am adaugat tone de clase la urmatorul meu proiect doar pentru ca vreau sa automatizez rutinele bazei de date.
- Nu ar trebui sa fie prea inteligent. Ar trebui sa ma ajute sa indeplinesc sarcini obisnuite si sa raman cat mai mult sub control.
- Nu ar trebui sa genereze schema DB. Pentru migratii voi folosi instrumente speciale.
- Fara incarcarea lenesa a obiectelor conexe. Nu aceasta magie, nici o prostie din spatele scenei.
- Nu exista aliasuri ciudate in SQL precum SELECT * FROM \ model \ Foo JOIN \ model \ Bar …
- Entitati subtiri care nu contin nicio logica de afaceri sau chiar logica specifica stocarii (relatii etc.). Acest lucru face ca lucrurile sa fie supracomplicate si sa conduca la un control mai redus din partea dezvoltatorului. Separarea logicii de persistenta de entitati le face reutilizabile chiar si atunci cand comutati backend-ul de stocare. Desi acest lucru nu este adesea necesar, aceasta este o caracteristica la indemana, care este usor de realizat. Mai mult, uneori as dori, de exemplu, sa accesez aceeasi entitate in moduri diferite: de exemplu, daca am un tabel pe care vreau sa il accesez atat prin MySQL, cat si prin Handlersocket.
- O implementare Query-Object cu o interfata ingrijita. De obicei prefer sa scriu interogari SQL de mana. Cu toate acestea, exista cazuri in care interogarea trebuie sa fie formata dinamic, iar in astfel de cazuri un obiect cu interfata curata este un mare avantaj fata de compunerea sirului SQL manual.
- Ar trebui sa poata gestiona mai multe conexiuni DB.
videosgays tetonas delgadas
compilacion anal coños peludos rubios
viejas muy calientes comic maduras
insesto madurafollando
cinema gropers pornocolombianas
corridas anales casadas follando por dinero
filme porno vechi swingers españoles
monjas folladoras compartiendo novia
jovencita masturbandose hermanas tetonas
tias buenas desnudas lisbianas
hermanos jovenes follando brazzers videos completos
videos porno gay de españoles tetudas españolas
madura en la playa negros follando a blancas
travesti paja pilladas españolas follando
actores porno gay españoles peliculas x vintage
falsos casting porno metart films
porno rural abuelas y nietos xxx
mía kalifa mamadas retro
porno agresivo paginas sexo
travestis maduras tetonas cubanasIn mod ideal, ar trebui sa existe un manager de tranzactii care emite BEGIN / COMMIT / ROLLBACK pentru toate conexiunile care participa la interactiunile DB.
- In mod ideal, ar trebui sa aiba un utilitar de schele pentru a genera entitati din tabele DB.
Desi exista instrumente care se conformeaza unor cerinte, nu am reusit sa gasesc o biblioteca care sa aiba totul.
Selectati utilizarea:
Puteti seta moduri de preluare pentru Selectare:
Lucrul cu mai multe conexiuni DB:
In acest fel, daca ceva nu merge bine cu primul sau al doilea INSERT, tranzactiile din ambele conexiuni vor fi derulate inapoi, nu vor fi inserate randuri. Pe de alta parte, daca totul merge bine, tranzactiile in ambele conexiuni vor fi angajate.
Managerul de tranzactii accepta tranzactii imbricate, iar clasa tinyorm \ Db le accepta.
Am folosit o abordare similara cu cea a Zend Framework 2 (http://framework.zend.com/manual/current/en/user-guide/database-and-models.html). Clasele de entitati sunt doar simple containere de date care nu au logica de conexiune / persistenta DB. Cu toate acestea, in cele din urma, entitatile tinyorm au „cunostinte” minime despre relatia lor cu un strat de stocare. In primul rand, au metoda getSourceName () , care este in esenta menita sa returneze un tabel de stocare / numele colectiei. In al doilea rand, exista metode getPK () si setPK () pentru a accesa cheia primara. Coloana cheii primare nume este stocata in proprietatea pkName protejata . Si, in cele din urma, entitatile au getSequenceName (). Am facut toate acestea de dragul simplitatii, pentru a nu fi nevoie sa introduc mai multe clase. tinyorm accepta doar cheile primare ed AUTO_INCREMENT . In contractele pentru Zend Framework 2, toate lucrurile legate de persistenta sunt doar cateva clase / interfete:
- DbInterface – interfata pentru conectorul Db
- Db – un invelis in jurul DOP
- persistence \ Driver – interfata pentru driverul de persistenta
- persistence \ DbDriver – implementarea driverului de persistenta cu Db / PDO (deci RDBMS) ca backend. Testat numai cu MySQL, desi ar trebui sa functioneze bine si cu Postgres si Sqlite
- persistence \ HsDriver – implementare driver de persistenta cu handlersocket ca backend.
Driverul de persistenta functioneaza pe entitati. In cazul ZF2, putem vorbi despre Gateway-ul lor de tabel ca un driver de persistenta. Consultati linkul de mai sus pentru referinta. In tinyorm, lucrurile sunt mult mai simple. Trebuie doar sa creati o instanta de driver de persistenta si sa apelati metodele sale ‘ save () , insert () , update () , delete () care furnizeaza o entitate ca argument.
Pentru un obiect de interogare, am aruncat o privire asupra cadrului Phalcon (https://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Model_Query_Builder.html). Cu toate acestea, am modificat putin interfata, asa ca mi se pare putin mai buna.
De asemenea, am implementat un manager de tranzactii de baze de date capabil sa gestioneze mai multe conexiuni DB.
Multumim RasmiKanta Moharana (https://github.com/rashmi8105) pentru feedback-ul timpuriu si identificarea erorilor in aplicatia de exemplu!








