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";
}