Search code examples
phpsymfony1doctrinesymfony-1.4propel

Propel and leftJoin


In Doctrine i can:

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

How can i make this in Propel from Symfony 1?


Solution

  • If you use propel before 1.6, you have to follow

    You have to know the primary key for each relation. If it's id, it can be something like that:

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

    For Propel 1.6 (use it from https://github.com/propelorm/sfPropelORMPlugin), something like that:

    $results = OneQuery::create()
      ->useTwoQuery()
        ->filterByText('aaa')
        ->useThreeQuery()
          ->filterByText('bbb')
        ->endUse()
      ->endUse()
      ->leftJoinWith('Three.Four')
      ->find();