推动ORM并发连接

时间:2012-01-19 17:35:36

标签: php mysql database concurrency propel

我正在使用Propel ORM开发项目,需要连接到两个不同的数据库来检索某些数据。我试图在网上搜索指南,但没有运气,因为所有“解决方案”都是Symphony特有的,或者只是根本不起作用。

我希望能够指定两个连接,并且能够在某些查询期间通过将连接别名传递给查询来在它们之间切换。但是,同时打开两个连接也是可以接受的。

非常感谢任何和所有帮助!

谢谢, 迪马

1 个答案:

答案 0 :(得分:0)

根据Propel API Docs,您可以通过以下方式在schema.xml文件中定义数据库连接:

<?xml version="1.0" encoding="UTF-8"?>
<database name="bookstore" defaultIdMethod="native">
    <!-- table definitions go here -->
</database>

然后在runtime-conf.xml设置中,您可以设置连接参数:

<datasources default="bookstore">
  <datasource id="bookstore">
    <adapter>mysql</adapter> <!-- sqlite, mysql, mssql, oracle, or pgsql -->
    <connection>
      <dsn>mysql:host=localhost;dbname=my_db_name</dsn>
      <user>my_db_user</user>
      <password>my_db_password</password>
    </connection>
  </datasource>
</datasources>

- 编辑 -

Propel不支持数据库标记的别名属性,但您应该可以使用以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<database name="bookstore_primary" defaultIdMethod="native">
    <!-- table definitions go here -->
</database>

<database name="bookstore_secondary" defaultIdMethod="native">
    <!-- table definitions go here -->
</database>

<datasources default="bookstore_primary">
  <datasource id="bookstore_primary">
    <adapter>mysql</adapter> <!-- sqlite, mysql, mssql, oracle, or pgsql -->
    <connection>
      <dsn>mysql:host=localhost;dbname=bookstore_primary</dsn>
      <user>my_db_user</user>
      <password>my_db_password</password>
    </connection>
  </datasource>
</datasources>

<datasources default="bookstore_secondary">
  <datasource id="bookstore_secondary">
    <adapter>mysql</adapter> <!-- sqlite, mysql, mssql, oracle, or pgsql -->
    <connection>
      <dsn>mysql:host=localhost;dbname=bookstore_secondary</dsn>
      <user>my_db_user</user>
      <password>my_db_password</password>
    </connection>
  </datasource>
</datasources>

看看是否有效。在一天结束时,真正重要的是可以连接到两个数据库(使用相应的DSN)。