我正在申请等候名单。我希望能够向应用程序发送一个唯一的确认码 - 之后能够通过确认码或用户名找到用户。
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:
最佳答案
Symfony 默认使用 Propel,并支持 Doctrine 作为插件。
通过多对多关系进行查询的示例,其中表 Bugs
通过交集表 BugsProducts
与表 Products
相关:
[Bugs] <-- [BugsProducts] --> [Products]
使用 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>
查询示例:查找bug #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";
}
关于php - 多对多查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/300104/