使用

2011-07-29 6 views
0

は、サブ選択についてprevious questionに続いて、私はそうのように、参加に複数の条件を持つSQLステートメントを持っています、複数の結合を使用して非常に熟達していないようであり、以前の人々は結果を達成するためにhack criteria togetherしようとしました。これを行うとPropelが混乱し、CROSS JOINを使用し始めました。 Propelは二番目のパラメータのフィールドIDを認識できなかったので、私はreadたものから、これはでした:使用

$criteria->addJoin(self::ID, GroupMembershipPeer::PERSON_ID . ' AND ' . 
    GroupMembershipPeer::GROUP_ID . '=' . $group_id, 
    Criteria::LEFT_JOIN); 

私は、ある程度動作するように見えるのPropel 1.4のaddMultipleJoin()方法を見つけました。私はそれを完全に理解していない、または私は私が望むものを得るためにそれを呼ぶかもしれない方法:

$criteria->addMultipleJoin(array(
    array(
    'left' => self::ID, 
    'right' => GroupMembershipPeer::PERSON_ID, 
    'operator' => Criteria::EQUAL 
), 
    array(
    'left' => GroupMembershipPeer::GROUP_ID, 
    'right' => $group_id, 
    'operator' => Criteria::EQUAL 
), 
), Criteria::LEFT_JOIN); 

これは、いくつかの奇妙なSQLになり:

SELECT DISTINCT FROM `person` CROSS JOIN `group_membership` LEFT JOIN ON (= AND =) WHERE person.ID IN (3,5,17) AND group_membership.PERSON_ID IS NULL LIMIT 10 

、PHPはいくつかの奇妙なエラーを投げている:

誰かが自分自身かPropelが何か間違っていることを知っていますか、どのように修正したり、必要なものを達成することができますか?

答えて

1

たぶん私は間違っているが、なぜあなたはこのようなものを使用していないされています

$c->addJoin(array(self::ID, GroupMembershipPeer::GROUP_ID), array(GroupMembershipPeer::PERSON_ID, $group_id)); 

基準は、複数のはPropel 1.3以降の結合条件をサポートしています。 Criteria doc