Ответ - «нет», не занимаясь чем-то экзотическим. Если вы посмотрите на источник объекта Criteria, он поддерживает только одно имя базы данных.
У вас есть два варианта:
1) Сделайте два запроса и присоединитесь самостоятельно. Если вы не очень хорошо разбираетесь в вашей конкретной базе данных, то это тот, с которым стоит пойти. Просто убедитесь, что каждый запрос включает в себя ваше поле соединения, а затем выполняйте поиск по одному при поиске и добавлении из другого.
2) Настройте представление или хранимую процедуру в одной базе данных, которая вызывает вторую базу данных и виртуально объединяет таблицы. Насколько известно PHP, он имеет дело только с одной базой данных. Я знаю, что Oracle может сделать это - MySql мог бы, с некоторой экспертной конфигурацией. (Больше, чем мой скудный навык.)
- обновить в ответ на ваш комментарий -
Я этого не делал, поэтому у меня нет примера кода. Вот как я это выясню. (От макушки моей головы, так что не принимайте Евангелие ...)
Начните здесь с вашей конфигурации:
http://www.symfony -project.org / книга / 1_2 / 08-внутри-Model-Layer # chapter_08_database_connections .
Допустим, ваши два соединения были названы "db1" и "db2".
Укажите имя базы данных при создании объекта критериев:
$crit1 = new Criteria("db1");
$crit2 = new Criteria("db2");
Делайте ваши выборы в ваших двух классах базы данных.
$dataOnes = DataOnePeer:doSelect($crit1);
$dataTwos = DataTwoPeer::doSelect($crit2);
Тогда соедините их как-нибудь ...
foreach ($dataOnes as $d1) {
$joinKey = $d1->getMyJoinColumn();
$d2 = findByKey($dataTwos, $joinKey);
if (!empty($d2)) {
$d1->myD2 = $d2;
}
}
function findByKey($dataTwoArr, $key) {
foreach($dataTwoArr as $d2) {
if ($key == $d2->getMyJoinColumn()) {
return $d2;
}
}
return null;
}
Это предполагает отношение 1-1. Вам придется изменить на 1-многие.
Удачи!