php - Propel y leftJoin
symfony1 doctrine (2)
En Doctrine puedo:
$q = Doctrine_Query::create()
->from(''One o'')
->where(''t.text = ?'', ''aaa'')
->andWhere(''h.text = ?'', ''bbb'')
->leftJoin(''o.Two t'')
->leftJoin(''t.Three h'')
->leftJoin(''h.Four f'')
->execute();
¿Cómo puedo hacer esto en Propel de Symfony 1?
Si usa propel antes de 1.6 , debe seguir
Debes saber la clave principal para cada relación. Si es id
, puede ser algo así:
$c = new Criteria();
$c->add(TwoPeer::TEXT, ''aaa'');
$c->add(ThreePeer::TEXT, ''bbb'');
$c->addJoin(OnePeer::TWO_ID, TwoPeer::ID, Criteria::LEFT_JOIN);
$c->addJoin(TwoPeer::THREE_ID, ThreePeer::ID, Criteria::LEFT_JOIN);
$c->addJoin(ThreePeer::FOUR_ID, FourPeer::ID, Criteria::LEFT_JOIN);
$results = OnePeer::doSelect($c);
Para Propel 1.6 (utilícelo de https://github.com/propelorm/sfPropelORMPlugin ), algo así:
$results = OneQuery::create()
->useTwoQuery()
->filterByText(''aaa'')
->useThreeQuery()
->filterByText(''bbb'')
->endUse()
->endUse()
->leftJoinWith(''Three.Four'')
->find();
En relación con la respuesta j0k, una manera más fácil sería:
$results = OneQuery::create()
->useTwoQuery(null, Criteria::LEFT_JOIN)
->filterByText(''aaa'')
->useThreeQuery(null, Criteria::LEFT_JOIN)
->filterByText(''bbb'')
->endUse()
->endUse()
->find();