2010-09-22 9 views
8

Se uso un ORM, diciamo con Zend o Symfony. È un affare tutto o niente?L'ORM è tutto o niente?

Vorrei utilizzare l'ORM, ma anche ottimizzare le prestazioni in alcuni casi e scrivere personalmente la query per arrivare al nocciolo della questione. Quindi, se inizio a utilizzare un ORM, sarà difficile farlo alla vecchia maniera una volta che lo includerò nel mio progetto?

+2

Dipende dall'ORM, ad esempio NHibernate supporta [query denominate] (http://www.sidesofmarch.com/index.php/archive/2009/02/11/executing-native-sql-using-nhibernate-named -interrogazioni/). – R0MANARMY

+0

Quali ORM stavate considerando? –

risposta

9

La maggior parte degli ORM consente di eseguire query ad hoc.

+0

'Quali ORM stavate considerando? 'Sto guardando propel e dottrina, almeno per ora. – jblue

+0

Zend ha la capacità di afferrare l'handle del db e di attivare solo le query non elaborate sul db. È più importante che tu inserisca tutto il tuo codice di accesso db in classi di modelli in modo che tu possa trovarlo e aggiornarlo più tardi di quanto non lo sia per restare fedele all'orom a mio avviso. –

6

Utilizzando dottrina è abbastanza facile a "uscire" del ORM. Doctrine consente di scrivere query in 4 modi diversi:

  • DQL. Il linguaggio di query di Doctrine fornito con tutti i vantaggi di Doctrine.
  • DQL "raw" ("Query native" in Doctrine2). Questo è simile a DQL ma consente un po 'più di flessibilità nei comandi (ad esempio funzionalità specifiche del database). In questa modalità, dovrai specificare un po 'di più su come i componenti sono correlati tra loro.
  • SQL, utilizzando PDO di PHP. È possibile utilizzare un Doctrine_Connection per ottenere un'istanza PDO che consente di scrivere query, ma conserva ancora la sicurezza e la facilità d'uso concesse da PDO.
  • SQL grezzo. Anche se non sono sicuro del perché lo vorresti, penso che Doctrine fornisca questo, altrimenti, potresti sempre abbandonare completamente Doctrine.

Se stai usando Doctrine in Symfony, non ci sono assolutamente funzioni di Symfony che ti bloccano nell'uso di Doctrine, anche se è abilitato.

Un ultimo avvertimento: se si utilizzano alcune delle funzionalità avanzate di Doctrine (ad esempio eventi o comportamenti), queste diventeranno difficili da collegare quando si eseguono query al di fuori di DQL.

+0

'eventi o comportamenti' vuoi dire' created_at' e 'updated_at'? – jblue

+0

Se si sta utilizzando il comportamento di 'Timestampable' di Doctrine, non gestirà i record inseriti al di fuori di Doctrine. Tuttavia, Doctrine non ti impedisce di gestire i timestamp, ma a prescindere da Doctrine. –

0

È possibile combinare tutto ciò che si desidera. Il rischio principale è l'introduzione di incongruenze incompatibili tra i tuoi strumenti. Ipotetico:

se ho un'entità ORM doctrine2 chiamata Utente e utilizzo Zend_Db_Table per modificare alcuni valori tra i flush nella tabella degli utenti, potrei avere alcuni effetti collaterali involontari o comportamenti indesiderati.

Problemi correlati