2010-07-01 6 views
0

J'ai un objet Doctrine_Collection qui a été créé avec du code qui ressemble à quelque chose.Récupération de la requête qui a créé une collection Doctrine

$collection = Doctrine_Query::create() 
->from('FooBazBar') 
->where('widget_id = ?',$some_var) 
->execute(); 

À moins de l'écrire quelque part, est-il possible de récupérer la clause where qui a été utilisée pour créer la collection?

C'est, je veux être en mesure de quelque chose comme si

$collection->getWhereClauses(); //fake method 

Et retourner la clause where sous une certaine forme.

Un "non" définitif, ce n'est pas exposé via l'API "avec une explication est une réponse parfaitement raisonnable ici.

Répondre

1

Non, ce n'est pas exposée via l'API. Plus sérieusement, vous ne pouvez pas récupérer la requête qui a généré le Doctrine_Collection. La façon facile de le faire est de créer une méthode dans votre table, comme:

//FooTable.php 
public function findByWidgetQuery() 
{ 
return $this->createQuery('foo') 
    ->where('foo.baz = ?', 'bar'); 
} 

Et puis vous pouvez utiliser getDqlPart() comme ceci:

$where = Doctrine_Core::getTable('Foo') 
->findByWidgetQuery() 
->getDqlPart('where'); 

Cela devrait vous donner un tableau comme celui-ci un:

array(2) { [0] => string(8) 'widget = ?' [1] => string(10) 'widget = ?' } 

Notez qu'il ne renvoie pas la valeur réelle transmise à la clause where(). Pour ce faire, vous devez utiliser Doctrine_Query :: getParams() ou Doctrine_Query :: getFlattenedParams()

Vous pouvez trouver tout dans le Doctrine API.

+0

Qu'est-ce que je pensais, mais on ne sait jamais avec les hiérarchies d'objets profonds. Merci! –

-1
+0

Cela me permettra d'obtenir le sql pour un objet ** query **. J'ai une collection qui vient d'appeler l'exectue sur l'objet de requête. Je veux obtenir le sql d'origine utilisé pour générer la requête. –

+0

C'est le point cependant, n'appelez pas execute() Construisez simplement le DQL puis var_dump() à partir d'un appel getSqlQuery. Cela vous donne la requête telle qu'elle sera exécutée. – tsgrasser

+0

Bien, mais vous supposez que je suis celui du contrôleur de la Doctrine_Collection est instancié. J'apprécie cependant l'info! –

Questions connexes