Propel和leftJoin

Tim*_*ees 4 php propel doctrine symfony1 symfony-1.4

在Doctrine我可以:

    $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();
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Symfony 1的Propel中做到这一点?

j0k*_*j0k 6

如果你在1.6之前使用推进,你必须遵循

您必须知道每个关系的主键.如果是id,它可以是这样的:

$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);
Run Code Online (Sandbox Code Playgroud)

对于Propel 1.6(从https://github.com/propelorm/sfPropelORMPlugin使用它),类似的东西:

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