2015-11-14 1 views
1

J'ai une curiosité à propos de doctrine2. Pourquoi la doctrine a-t-elle créé 2 requêtes lorsque j'ai utilisé findOneByProperty (__call)?Pourquoi la doctrine a-t-elle créé 2 requêtes lorsque j'utilise la méthode findOneByProperty()?

$user = $this->getDoctrine()->getRepository('AppBundle:User') 
     ->findOneByName($user->getName()); 

Le profileur Web Symfony dit qu'il y a 2 requêtes à BD, pourquoi cela arrive-t-il ???

enter image description here

http://i.stack.imgur.com/ZSPEL.png

Merci

Répondre

3

Parce que $user->getName() se déclenche une requête! Si vous vous en débarrassez et passez une valeur de chaîne comme nom, par ex. 'Name4', Doctrine lancera une seule requête à la place.

Une autre chose est, vous semblez déjà connaître l'objet $user alors pourquoi exécuter une autre requête pour obtenir le même objet à nouveau?

Mise à jour:

Ce qui est techniquement ce que vous faites:

public function indexAction() 
{ 

    $result1 = $this->userRepository->findOneByName('Name4'); 
    $result2 = $this->userRepository->findOneByName($result1->getName()); 

    return $this->getTemplate(['result' => $result2]); 
} 

Mais vous devriez le faire à la place:

public function indexAction() 
{ 
    $result1 = $this->userRepository->findOneByName('Name4'); 

    return $this->getTemplate(['result' => $result1]); 
} 
-1

Non, j'utiliser le type hinting, mon le contrôleur (Symfony) est le suivant:

/** 
* @Route("/user-{name}", name="queryUsers") 
*/ 
public function queryUsersAction(User $user) 
{ 
    $user = $this->getDoctrine()->getRepository('AppBundle:User') 
     ->findOneByName($user->getName()); 

    return $this->render('query/query-by-property.html.twig', array(
     'user' => $user 
    )); 
} 
+0

Voici ce que vous devriez faire: '@Route ("/user/{nom} ", name =" query_users ")' et 'queryUsersAction ($ name)' puis 'findOneByName ($ name)' – BentCoder

+0

Ooops !!! Je suis désolé!! Je l'oublie = ( –