使用Doctrine在多个数据库之间进行列聚合

时间:2010-12-05 16:41:04

标签: php doctrine

假设我在不同的数据库中有2个表,代表一个模型 (一对一列聚合)。

模式:

Table1:
  connection: conn1
  columns:
    property1: string
Table2:
  connection: conn2
  columns:
    table1_id: integer
    property2: string
  relations:
    Table2:
      local: table1_id
      foreign: id
      type: one
      foreignType: one

所以我可以从一个表中检索教义集合:

$objects = Doctrine::getTable('Table1')->findAll()

然后从另一个表中检索每个对象的属性:

foreach ($objects as $object) 
{
  $object->getProperty2();
}

但是,这将导致来自Table2的过多sql请求(每个对象一个请求)。 我想要实现的是每个表的一个sql请求。

如果两个表在一个数据库中,一个简单的连接就可以了。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣,这里有一个解决方案:基本上你需要执行2个单独的查询,产生2个独立的结果集,然后使用Doctrine_Collection :: populateRelated()方法加入它们。

$res_set1 = Doctrine::getTable('Table1')->findAll()
$res_set2 = Doctrine::getTable('Table2')
  ->createQuery('t')
  ->whereIn('t.table1_id', $res_set1->getPrimaryKeys())
  ->execute();

$res_set1->populateRelated('Table2', $res_set2);