私はもともとsymfony1.2のためにこれを書きましたが、それはすべて当てはまると思います。
この例ではSymfony1.2.4を使用しています。マスターとスレーブの2つのデータベースがあります。
複数のデータベースを使用する場合は、実行する必要のあることがいくつかあります。
You will need separate schema files for both (master.schema.yml and slave.schema.yml)
To use build-sql and insert-sql, you will need multiple propel.ini files
You will need to add an attribute to your schema files to get them to build right
ステップ1
2つの別々の接続でdatabases.ymlを作成します。
dev:
propel:
param:
classname: DebugPDO
test:
propel:
param:
classname: DebugPDO
all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: mysql:dbname=master;host=xxx.xxx.xxx.xxx
username: uname
password: pass
encoding: utf8
persistent: true
pooling: true
master:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: mysql:dbname=slave;host=xxx.xxx.xxx.xxx
username: uname
password: pass
encoding: utf8
persistent: true
pooling: true
ステップ2
前述のように、2つのスキーマファイルが必要になります。テーブルに一致するデータベースのパッケージ属性を定義する必要があることに注意してください。この場合、マスター接続の場合は「lib.model.master」です。
master.schema.yml
master:
_attributes:
package: lib.model.master
defaultIdMethod: native
my_table:
_attributes: { package: lib.model.master }
my_id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
等.....
slave.schema.yml
slave:
_attributes:
package: lib.model.slave
defaultIdMethod: native
auctionp:
_attributes: { package: lib.model.slave }
等.....
ステップ3
個別のpropel.iniファイルを作成する必要があります。この例では、propel-master.iniとpropel-slave.iniを使用しました。これらの各ファイルは、それぞれのデータベース用に構成する必要があります。
ステップ4
推進ツールを使用してデータベースを構築するには、適切なバッチファイルが必要になります。私のはこのように見えます:
アプリケーションルートから:symfony build-model; cp config / slave-propel.ini config / propel.ini; symfony propel:build-sql; symfony propel:insert-sql --no-confirmation; cp config / propel-master.ini config / propel.ini; symfony propel:build-sql; symfony propel:insert-sql --no-confirmation;
ステップ5
1つのデータベースを使用してモデルを既に構築し、現在分割を実行している場合は、/ lib/modelをクリーンアップする必要があります。「map」および「om」ディレクトリとルートディレクトリのファイルを削除すると、競合を回避するのに役立ちます。
ステップ6
コードで2つのデータベースを使用するには、次のように接続にビットを追加する必要があります。
例1:
$object = self::doSelect($c, Propel::getConnection('master'));
例2:
$newObject->save(Propel::getConnection('slave'));
例3:
$con = Propel::getConnection("propel");
$sql = "ALTER TABLE runlinhp CHANGE class class_rat varchar(15)";
$stmt = $con->prepare($sql);
$stmt->execute();