2008-11-18 121 views
3

我正在做一個等候名單申請。我希望能夠嚮應用程序發送一個唯一的確認代碼 - 並且稍後可以通過確認代碼或用戶名來查找用戶。多對多查詢

會的Symfony能夠調用模型說兩種:

Code->findUser($code_string); 

User->getCode(); 

我相信下面的模式有關係,但我不知道這是否是這些捆綁在一起的關係的方式Symfony的。

謝謝您的時間,

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: 

回答

2

Symfony的使用行走在默認情況下,支持主義作爲一個插件。

實施例通過查詢一個多到多的關係,其中表Bugs通過交叉路口表BugsProducts有關表Products

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

解決方案使用行走:

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> 

示例查詢:查找錯誤#1234,通過多對多查詢獲取相關產品,並進行報告。

$bug = BugsPeer::retrieveByPK(1234); 

$bugProducts = $bug->getBugsproductsJoinProducts(); 

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

解決方案使用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')); 
    } 
} 

例子查詢:查找BUG#1234,經過許多一對多查詢,報告獲得相關產品。

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

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

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