php symfony1 doctrine symfony-1.4 propel

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();