2011-09-23 14 views
5

Sono un. NET convertito in PHP e sto avendo un buon momento con la transizione. Sto usando doctrine 1.2 come mio ORM e ho i miei modelli funzionanti e tutto è ben collegato. Tuttavia, il problema che sto guardando ora è che gli oggetti di output sono enormi. Ho una tabella abbastanza semplice chiamata USERS - ha probabilmente 8 colonne e FK a 4 o 5 altre tabelle. Sto usando il codice seguente per idratare i miei utenti oggetto:Gli oggetti Doctrine sono ENORME

$q = Doctrine_Query::create() 
->select('u.*') 
->from('USERS u') 
->where('u.VANITY_URL = ?',$Url_Frag); 

$users = $q->execute(); 

print_r($users); 

vedo l'oggetto idratata w/i miei dati in modo che c'è di buono. Tuttavia, arriva anche con quello che sembra un mucchio di meta dati che ovviamente non ho bisogno. Nel complesso, l'oggetto è lungo oltre 5000+ linee! Sono sicuro che c'è un passaggio ovvio da qualche parte che sostanzialmente dice "emetti solo tali e questi dati" ma non riesco a trovarlo nel manuale di dottrina.

Pensieri?

+0

Utilizzare print_r ($ users-> toArray()); btw, avere un oggetto di 5000 linee non è affatto un problema. – Zeljko

risposta

1

Hai diverse opzioni. Uno è quello di passare a doctrine2: ha modelli eleganti, senza alcuna magia di dottrina1.

I secondi sono per cambiare la modalità di idratazione. Non si può veramente modificare il modello di dottrina o la gravità di un oggetto senza modificare la logica doctrine_record. Quindi questo potrebbe funzionare:

$q = Doctrine_Query::create() 
->select('u.*') 
->from('USERS u') 
->where('u.VANITY_URL = ?',$Url_Frag) 
->setHydrationMode(Doctrine::HYDRATE_ARRAY); 
$users = $q->execute(); 

Print_r'ing questi oggetti saranno hughe, dato che ci sono molti oggetti annidati nella rete di classe dottrina (alcuni oggetti hanno un po 'di "complesso di Dio" in loro).

Ulteriore documentazione può essere trovato qui: http://www.doctrine-project.org/documentation/manual/1_2/pl/data-hydrators:core-hydration-methods

1

se non sto sbagliando, ci sono alcuni riferimenti cerchio nel Doctrine1.2 entità, in modo print_r o var_dump su di loro non è una buona idea. In realtà, se non hai qualcosa come Xdebug che limita la profondità della ricorsione, non otterrai mai l'output nel browser.

Se si è veramente interessati al consumo di memoria, utilizzare la funzione memory_get_usage per esaminare l'impronta di memoria prima e dopo l'idratazione.

7

In Doctrine2, c'è un dump() metodo disponibile presso:

\Doctrine\Common\Util\Debug::dump($var, $maxDepth) 

Si fa un lavoro simile a print_r e var_dump, ma nasconde tutti i dati Dottrina-correlati.

Forse c'è qualcosa di simile per Doctrine 1.x?

6

Doctrine 1.2 entità oggetti e collezioni ha un metodo denominato "toArray". Quindi puoi fare:

print_r($users->toArray()); 
Problemi correlati