Объединение разных баз данных на разных серверах в Doctrine и PostgreSQL - PullRequest
2 голосов
/ 18 августа 2011

Есть ли способ сделать то, что dblink делает в Doctrine?

Мне нужно объединить две таблицы из двух баз данных на двух серверах, и я не хочу использовать RawSql, но использую модели.1004 * Спасибо заранее

1 Ответ

2 голосов
/ 24 сентября 2011

То, что вы хотите, «технически» не поддерживается как конструктивная особенность в Doctrine.

Итак, если вы хотите сделать это так, как если бы вы использовали традиционный PostgreSQL:

SELECT table1.field1, table1.field2, table2.field2, 
    FROM table1 INNER JOIN 
        dblink('dbname=db2 port=5432 host=domainname2 
                user=someuser password=somepwd',
                'SELECT field1, field2,
                FROM other_table')
            AS table2(field1 int, field2 char(25))
        ON table1.field3 = table2.field1;

Вы бы заменили одно соединение по умолчанию в вашем файле config.php на два соединения.

<?php

Doctrine_Manager::connection('mysql://root@server1/doctrine_db1', 'db1');
Doctrine_Manager::connection('mysql://root@server2/doctrine_db2', 'db2');

Тогда вы бы изменили свою схему примерно так:

---
Table1:
    tableName: db1.table1
    connection: db1
    columns:
        filed1: integer
        field2: string(255)
        field3: integer
    relations:
        Table2:
        foreignType: one
        onDelete: CASCADE

Table2:
    tableName: db2.table2
    connection: db2
    columns:
        field1: integer
        field2: string(25)

Тогда вы будете строить базу данных после добавления данных, как обычно. Затем просто выполните обычное моделирование, указав в таблице нужное поле, как при обычном запросе.

Присоединения к базе данных Doctrine Cross подробно обсуждаются в блоге Doctrine. Так что вы можете проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...