2008-11-18 11 views
3

Je fais une demande de liste d'attente. J'aimerais pouvoir envoyer aux applications un code de confirmation unique - et plus tard être en mesure de trouver un utilisateur soit par code de confirmation ou par nom d'utilisateur.recherche de plusieurs-à-plusieurs

Est-ce que Symfony pouvoir appeler modèles dire soit:

Code->findUser($code_string); 

User->getCode(); 

Je crois que le schéma ci-dessous présente les relations, mais je ne suis pas sûr que ce soit la façon Symfony de lier ces relations ensemble.

Merci pour votre temps,

user: 
    id: 
    last_name: varchar(255) 
    first_name: varchar(255) 
    email: varchar(255) 

    code: 
    id: 
    secret: varchar(255) 

    user_code: 
    id: 
    user_id: 
    code_id: 

    course: 
    id: 
    title: varchar(255) 

    quarter: 
    id: 
    title: varchar(255) 

    wait_list: 
    id: 
    user_id: 
    course_id: 
    quarter_id: 

Répondre

2

Symfony utilise Propel par défaut, et prend en charge la doctrine en tant que plug-in.

Exemple interrogation par plusieurs-à-plusieurs où la table Bugs est liée à la table Products par une table d'intersection BugsProducts:

[Bugs] <-- [BugsProducts] --> [Products] 

Solution en utilisant Propel:

schema.xml:

<table name="Bugs"> 
    <column name="bug_id" type="INTEGER" required="true" 
    primaryKey="true" autoIncrement="true" /> 
    </table> 

    <table name="Products"> 
    <column name="product_id" type="INTEGER" required="true" 
    primaryKey="true" autoIncrement="true" /> 
    <column name="product_name" type="VARCHAR" size="50" required="true" /> 
    </table> 

    <table name="BugsProducts"> 
    <column name="bug_id" type="INTEGER" required="true" primaryKey="true" /> 
    <column name="product_id" type="INTEGER" required="true" primaryKey="true" /> 
    <foreign-key foreignTable="Bugs"> 
     <reference local="bug_id" foreign="bug_id" /> 
    </foreign-key> 
    <foreign-key foreignTable="Products"> 
     <reference local="product_id" foreign="product_id" /> 
    </foreign-key> 
    </table> 

Exemple requête: recherche le bogue n ° 1234, recherche de produits connexes via une requête plusieurs-à-plusieurs et rapport.

$bug = BugsPeer::retrieveByPK(1234); 

$bugProducts = $bug->getBugsproductsJoinProducts(); 

foreach ($bugProducts as $bp) { 
    $product = $bp->getProducts(); 
    print "bug id #".$bug->getBugId().": product ".$product->getProductName()."\n" 
; 
} 

Solution utilisant Doctrine:

class Bugs extends Doctrine_Record 
{ 
    public function setUp() 
    { 
    $this->hasMany('Products', array('local'=>'bug_id', 
       'foreign'=>'bug_id', 
       'refClass'=>'BugsProducts')); 
    } 
} 

class Products extends Doctrine_Record 
{ 
    public function setUp() 
    { 
    $this->hasMany('Bugs', array('local'=>'product_id', 
       'foreign'=>'product_id', 
       'refClass'=>'BugsProducts')); 
    } 
} 

Exemple requête: rechercher bug # 1234, obtenir des produits connexes par l'intermédiaire de nombreux à plusieurs requêtes, et le rapport.

$bugsTable = Doctrine::getTable('Bugs'); 

$bug = $bugsTable->find(1234); 

foreach ($bug->Products as $product) { 
    print 'Bug #'.$bug->bug_id.': product '.$product->product_name."\n"; 
}