사용

2011-07-29 5 views
0

하위 선택에 대한 previous question에 이어, 나는과 같이, 가입에 여러 기준을 가진 SQL 문이 , 여러 조인을 사용하여 매우 숙달되지 않으며 이전 사람들은 결과를 얻기 위해 hack criteria together을 시도했습니다. 이렇게하면 Propel이 혼란스럽고 CROSS JOIN을 사용하기 시작했습니다.사용

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

난 후 어느 정도 일 것으로 보인다 추진 1.4의 addMultipleJoin() 방법을 발견 추진이 두 번째 매개 변수의 필드 ID를 인식하지 수 있기 때문에 내가 read을했습니다 어떤에서이이었다. 나는 완전히 이해하지 않는, 또는 내가 원하는 것을 얻을 호출하는 방법 :

$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는 이상한 오류를 던지고있다 :

Notice: Undefined offset: 0 in /path/lib/vendor/symfony/lib/plugins/sfPropelPlugin/lib/vendor/propel/util/Criteria.php on line 675 

사람이 내가 그것을 해결, 또는 내가 원하는 것을 달성하는 방법은 자신 또는 추진이 뭔가 잘못하고 있는지 알고 있습니까?

답변

1

은 어쩌면 내가 잘못,하지만 왜이 같은 것을 사용하지 않았다

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

기준이 지원하는 여러가 추진 1.3 이후 조건을 가입 할 수 있습니다. Criteria doc