2012-03-16 5 views
6

MODIFICA: Se hai problemi simili This Topic ti interesseràCome impedire a Doctrine di scaricare lentamente le relazioni uno a uno?

Ho User e UserSettings con una relazione bidirezionale uno a uno. Sembra che anche se non utilizzo alcun valore UserSettings nella mia pagina, doctrine pigro lo carica comunque.

È questo comportamento previsto? Perché Doctrine sta recuperando questi dati anche se non lo sto usando nella mia pagina? Se non riesco a fermarlo, dovrei unire questo UserSettings all'utente ogni volta che richiamo l'oggetto utente, ma questo è così inutile.

Cosa posso fare per evitare che ciò accada?

codice che carica i dati:

->createQuery('SELECT p, u, s FROM TestPostBundle:Post p LEFT JOIN p.user u LEFT JOIN p.sub s WHERE p.id IN (:ids)') 
->setParameter('ids', $ids) 
->getResult(); 

Il ciclo di ramoscello I attraverso i messaggi e visualizzare i dati postali e utente associato, ma non ho mai richiesta alcuna variabile UserSettings, io non sono l'accesso a loro a tutti.

+0

Invia il codice che carica gli utenti, per favore. –

+0

@FractalizeR Ho appena aggiunto il codice – DavidW

+1

Non è previsto un comportamento. Immagino che da qualche parte tu stia di fatto impostando un utente. Prova a inserire un'istruzione die() nel metodo getUserSetting. Questo dovrebbe confermare o smentire le mie speculazioni. – Cerad

risposta

1

Ho anche affrontato lo stesso problema. Sembra che quando si interroga da una parte inversa la dottrina interroga anche il lato proprietario. Vedi this discussion.

+0

Post correlati Ho pensato che potreste essere interessati a dare un'occhiata a: http://stackoverflow.com/questions/9848747/primary-key-of-owning-side- as-a-join-column – DavidW

+0

Ho postato una soluzione alternativa nella domanda correlata: http://stackoverflow.com/a/14885237/138106 –

4

Ho visto questa domanda ha chiesto in alcuni posti e sto aggiungendo la mia risposta qui:

mi sono imbattuto in questo stesso problema e ricorda che il tutorial symblog ha dato un esempio di come ridurre il lazy loading esplicitamente aggiungi i join di sinistra sui tavoli che non ti servono. Sembra strano includere tabelle su un join quando non vuoi nemmeno quei dati, ma in questo modo ridurrai tutte quelle query aggiuntive fino a 1 e verrà eseguito più velocemente.

Ricerca di caricamento pigro - circa 1/5 del modo in giù http://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html

Per risolvere questo problema per l'utente/problema userdata provare ad aggiungere questo al repository utente e utilizzare per ogni volta che è necessario per ottenere tutti gli utenti, anche se non vuoi dati utente. Esso può essere ulteriormente migliorata selezionando parziali: - ('p parziali {user_id, nome,}')> selezionare

public function getAll($limit = 500) { 
     $qb = $this->createQueryBuilder('u') 
      ->select('u', 'd') 
      ->leftJoin('p.userdata', 'd') 
     if (false === is_null($limit)) 
      $qb->setMaxResults($limit); 
    return $qb->getQuery()->getResult(); 
    } 

UPDATE
Il tutorial symblog sembra essere verso il basso e sto lasciando il link qui per il momento nel caso in cui è temporaneo. Il codice rilevante è qui nella risposta.

+1

il collegamento è rotto – Mick

Problemi correlati