在 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();
我如何在 Symfony 1 的 Propel 中制作这个?
最佳答案
如果在1.6之前使用propel,则必须遵循
您必须知道每个关系的主键。
如果是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);
对于 Propel 1.6(从 https://github.com/propelorm/sfPropelORMPlugin 使用它),像这样:
$results = OneQuery::create()
->useTwoQuery()
->filterByText('aaa')
->useThreeQuery()
->filterByText('bbb')
->endUse()
->endUse()
->leftJoinWith('Three.Four')
->find();
关于php - 推进和左加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9735666/