Агрегация столбцов между несколькими базами данных с использованием Doctrine - PullRequest
0 голосов
/ 05 декабря 2010

Допустим, у меня есть 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();
}

Но это приведет к слишком большому количеству запросов sql из таблицы 2 (один запрос)для каждого объекта).То, что я пытаюсь достичь, это один SQL-запрос от каждой таблицы.

Если обе таблицы находятся в одной базе данных, простое объединение поможет.Есть предложения?

1 Ответ

0 голосов
/ 09 декабря 2010

Если кого-то интересует, вот решение: в основном вам нужно выполнить 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);
...