Skrypt PHP może — za pośrednictwem propelowych obiektów — łączyć się z wieloma bazami danych.
Przed uruchomieniem generatora klas (tj. skryptu propel-gen.bat) w pliku runtime-conf.xml należy wymienić wszystkie bazy danych:
<datasources default="osoby">
<datasource id="osoby">
<adapter>mysql</adapter>
<connection>
<phptype>mysqli</phptype>
<hostspec>localhost</hostspec>
<database>osoby</database>
<username>osobyadm</username>
<password>osobypass</password>
<encoding>utf8</encoding>
</connection>
</datasource>
<datasource id="wyrazy">
<adapter>mysql</adapter>
<connection>
<phptype>mysqli</phptype>
<hostspec>localhost</hostspec>
<database>wyrazy</database>
<username>wyrazyadm</username>
<password>wyrazypass</password>
<encoding>utf8</encoding>
</connection>
</datasource>
</datasources>
Dla każdego wymienionego źródła danych przygotowujemy osobny plik XML z opisem struktury bazy, np.
wyrazy-schema.xml osoby-schema.xml
Tak skonfigurowany Propel wygeneruje plik konfiguracyjny -conf.php, umożliwiający łączenie się obiektów z wieloma bazami, przy czym wszystkie wygenerowane klasy trafią do jednego folderu.
Jeśli w pliku build.properties dodasz wpis:
propel.packageObjectModel = true
zaś w plikach -schema.xml umieścisz atrybut package:
<database package="wyrazy" name="wyrazy" ... >
to generowane klasy zostaną umieszczone w osobnych folderach. Atrybut package zawierający kropkę:
package="core.system"
spowoduje dalszy podział generowanych folderów na podfoldery:
core/system
W skrypcie PHP, który korzysta z kilku połączeń należy najpierw wywołać metodę init():
Propel::init('dwiebazy-conf.php');
a następnie utworzyć zmienne umożliwiające korzystanie z połączeń:
$con_osoby = Propel::getConnection('osoby');
$con_wyrazy = Propel::getConnection('wyrazy');
Metody pobierające rekordy z baz danych otrzymają dodatkowy parametr ustalający połączenie:
$wyrazy = WyrazPeer::doSelect(new Criteria, $con_wyrazy); $osoby = OsobaPeer::doSelect(new Criteria, $con_osoby);
Pierwsza z powyższych instrukcji pobiera dane z bazy o nazwie wyrazy, a druga — z bazy o nazwie osoby.
Utworzone obiekty nie wymagają podawania połączenia. Korzystamy z nich identycznie jak w skryptach, które stosowały jedną bazę danych:
echo $osoby[0]->getImie()
$wyrazy[0]->setWyraz('Lorem');
$wyrazy[0]->save();