php - 多对多查找

标签 php orm symfony1

我正在申请等候名单。我希望能够向应用程序发送一个唯一的确认码 - 之后能够通过确认码或用户名找到用户。

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/

相关文章:

php - CI 模型中的 where_not_in 代码

php - codeigniter:将值从数组1插入到数组2?

java - 如何编写此 JPQL 查询?

Java 连接池不限制打开到数据库服务器的 TCP 连接数

javascript - 使用可选参数对 Where 子句进行后续处理

php - 模拟保存 propel 对象(不写入表)

PHP/MYSQL - 如何在应用程序中处理数据库级约束

php - 在一个查询中组合不同的排名

symfony1 - 从PHPUnit代码覆盖范围强制排除文件

php - 你能强制 symfony 解析到特定的路由吗?