Ответ «нет», не делая что-то экзотическое. Если вы посмотрите на источник объекта Criteria, он поддерживает только одно имя базы данных.
У вас есть два варианта:
1) Есть два запроса и сделайте сами присоединиться. Если вы не очень хорошо разбираетесь в своей конкретной базе данных, это тот, с которым нужно идти. Просто убедитесь, что каждый запрос включает ваше поле соединения, а затем заходит за один, пока вы просматриваете и добавляете от другого.
2) Настройте представление или хранимую процедуру в одной базе данных, которая вызывает вторую базу данных и фактически соединяется с таблицами. Насколько известно PHP, он работает только с одной базой данных. Я знаю, что Oracle может это сделать - MySql может быть с некоторой экспертной конфигурацией. (Больше, чем мой скудный мастерства.)
- обновление в ответ на ваш комментарий -
Я не сделал это так, я не имею образец кода. Вот как я это понял. (Сверху моей головы, так что не принимайте как евангелие ...)
Начните здесь с вашей конфигурации: http://www.symfony-project.org/book/1_2/08-Inside-the-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-много.
Удачи вам!
Соединитесь со мной .. у вас есть пример для этого? – Graviton