2010-05-25 17 views
1

J'ai des difficultés à sélectionner un sous-ensemble de données avec doctrine.doctrine findby relation

J'ai 3 tables

Localisation Contactez Contact_location

Les tables de contact et l'emplacement tiennent un nom et un identifiant l'autre table ne contient que les ID. Par exemple:

Location 
loc_id: 1 
name: detroit 
Contact 
contact_id: 1 
name: Mike 
Contact_location 
loc_id: 1 
contact_id: 1 

Dans la doctrine il y a un plusieurs à plusieurs entre l'emplacement et les tables de contact avec contact_location comme ref_class.

Ce que je veux faire est sur ma page d'emplacement que je veux trouver tous les contacts où par exemple la LOC_ID = 1.

I Tried:

$this->installedbases = Doctrine::getTable('contact')->findByloc_id(1); 

l'espoir doctrine verrait la relation et obtenir ça, mais ce n'est pas le cas.

Comment puis-je effectuer une recherche de doctrine dans des tables connexes pertinentes? Je l'ai lu peut être fait en utilisant Findby mais je trouve la documentation peu claire.

Répondre

2

Ajouter une méthode sur votre classe de table:

class ContactTable extends Doctrine_Table 
{ 
    public function findByLocationId($id) 
    { 
    return self::createQuery("c") 
     ->innerJoin("c.Location l") 
     ->where("l.loc_id = ?", $id) 
     ->execute(); 
    } 
} 

puis l'appeler comme suit:

$loc_id = 1; 
$result = Doctrine::getTable("Contact")->findByLocationId($loc_id); 

Doctrine devrait utiliser le refclass pour effectuer la jointure interne pour vous.

7

Remplacez findByloc_id() par findByLocId(). La méthode est capturée par magie __call().

Questions connexes