2

一部のデータがMySQLデータベースに保存され、他のデータがPostgreSQLデータベースの別のサーバーに保存されるSymfonyプロジェクト(PropelをORMとしてsymfony 1.4バージョンを使用)を作成しています。

より正確に言うと、いくつかのモデルを MySQL データベースに保存し、他のモデルを PostgreSQL データベースに同時に保存し、明示的なデータベースの切り替えなしでシームレスに実行したいと考えています (つまり、Propel は適切なデータベース接続と SQL ダイアレクトを使用してデータを取得/保存します)。MySQL 部分のモデルは、PostgreSQL との関係を持ちません。

出来ますか?はいの場合、開発環境をセットアップする方法も知りたいです (開発環境と本番環境で異なる MySQL/PostgreSQL DB にアクセスしたい)。

UPD: この問題について SO に関する質問を見つけました: Symfony での複数のデータベースのサポートしかし、Symfony の最近のバージョンで動作するかどうかを確認する必要があります。

4

2 に答える 2

2

私は毎日 symfony を使用していますが、実際にはモデルの無関係な部分を保存するために 2 つのデータベースを使用できます。database.yml で両方の接続を設定する必要があります (私は posgress に慣れていないので、正しく設定する方法を理解する必要があります):

  mysql_connection:
    class:        sfPropelDatabase
    param:
      phptype:    mysql
      classname:  MysqlPropelPDO
      dsn:        ''
      username:   user
      password:   pass
      encoding:   UTF-8
      pooling:    true

  postgress_connection:
    class:        sfPropelDatabase
    param:
      phptype:    postgres
      classname:  PostgresPropelPDO
      dsn:        ''
      username:   user
      password:   pass
      encoding:   UTF-8
      pooling:    true

それが完了したら、schema.yml ファイルまたは複数のファイルから開始する必要があります (2 つのデータベースを使用するため、mysql 用と postgres データベース用に 2 つのファイルを用意することをお勧めします):

mysql_schema.yml ファイル:

//This is how you tell witch connection you are using for this tables
connection: mysql_connection 

classes:
  CLassName:
    tableName: table_name
    columns:
      id:
      name:
        type: varchar(255)
        required: true
  [...]

postgres_schema.yml ファイル:

connection:  postgress_connection
    classes:
      ClassName:
        tableName: table_name
        columns:
          id:
          name:
            type: varchar(255)
            required: true
      [...]

スキーマ ファイルの設定が完了したら、すべてのクラスを作成して楽しみましょう。お役に立てれば

于 2011-06-06T15:18:55.957 に答える
1

私はあなたができると信じています!

Googleはこれについてかなりの数の結果を持っています。試してみてください

http://snippets.symfony-project.org/snippet/194

これは propel/symfony の古いバージョンに基づいていますが、ざっと見てみると、まだ有効であると思います。さらに、それが機能することを示唆する最近のコメントがあります。

于 2011-06-03T07:23:50.260 に答える