加入Doctrine和PostgreSQL中不同服务器上的不同数据库

时间:2011-08-18 09:09:31

标签: php postgresql join doctrine

有没有办法做dblink在Doctrine中做的事情?

我需要从两个服务器上的两个数据库连接两个表,并且不想使用RawSql,而是使用模型。

提前致谢

1 个答案:

答案 0 :(得分:2)

作为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博客中详细讨论了

Doctrine Cross Database Joins。所以你可以看一下。