2010-06-04 5 views
1

Exemple:Possibilité d'utiliser _referenceMap avec join() sur Zend_Db_Select?

class Products extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'products'; 

    protected $_referenceMap = array(
     'Bug' => array(
      'columns'   => array('bug_id'), 
      'refTableClass'  => 'Bugs', 
      'refColumns'  => array('bug_id') 
     ) 
    ); 

} 

$object = new Products(); 

$select = $object->select()->from()->Join('Bug'); 

Au lieu de définir la déclaration complète rejoindre

+0

Great :) Juste gagné le Badge de Tumbleweed! – Phliplip

+0

Je cherche cette réponse aussi, ou faire quelque chose de similaire en utilisant $ _referenceMap – gawpertron

Répondre

1

Pour autant que je peux dire _referenceMap $ n'est pas utilisé de cette façon. $ _referenceMap définit la relation entre une ligne de table et d'autres tables. C'est pourquoi les findDependentRowset(), findManyToManyRowset() et findParentRow() associés sont trouvés dans Zend_db_Table_Row_Abstract. Ces méthodes créent les jointures. Donc, pour obtenir les lignes dépendantes des bogues, en utilisant un objet select, vous feriez quelque chose comme ceci, en supposant que Products a une relation un-à-plusieurs avec Bugs;

class Products extends Zend_Db_Table_Abstract 
{ 
    protected $_name    = 'products'; 
    protected $_dependentTables = array('Bugs'); 
} 

class Bugs extends Zend_Db_Table_Abstract 
{ 
    protected $_referenceMap = array(
     'Products' => array(
      'columns'   => array('bug_id') 
      ,'refTableClass'  => 'Products' 
      ,'refColumns'  => array('bug_id') 
     ) 
    ); 
} 

Pour obtenir des lignes dépendantes, vous devez d'abord aller chercher une ligne parente.

$products = new Products(); 

$productRow = $products->find(123) 
         ->current(); 

Vous pouvez affiner la rejoindre en utilisant Zend_Db_Select

$select = $products->select() 
        ->where('foo_bar = ?', 'cheese') 
        ->limit(2); 

Enfin interroger les lignes dépendantes en passant dans l'objet de sélection à la place au lieu d'une clé de règle. Je pense que cela fonctionnera, je vais devoir vérifier demain matin.

+0

Vous avez absolument raison, a découvert moi-même aussi :) – Phliplip

1

Ceci est utile pour une ligne, mais pas pour toute la table (ou plusieurs lignes). J'ai besoin généralement des requêtes qui touchent plus d'une ligne ... Zend devrait mettre en œuvre l'option mentionnée par Phliplip, ou quelque chose de similaire:

$select = $object->select()->from()->Join('Bug'); 

Note: Je veux dire, en utilisant une seule requête