2010-02-16 3 views
1

나는 codeigniter와 doctrine을 사용하여 채팅 응용 프로그램을 구축 중입니다.Doctrine ORM으로 행 제외하기 DQL (NOT IN)

테이블 :
- 사용자
- User_roles
- User_available

관계 :
ONE 사용자가 많은 역할을해야합니다. 하나의 user_available 사용자가 1 명 있습니다.

채팅 할 수있는 사용자는 user_available 테이블에 있습니다.

문제 : 7

그래서 내가 좋아하는 DQL 무언가 표현 할 필요가 ROLE_ID 도착하지 않은 모든 사용자에 user_available에서 (이 그냥 즉, 심지어 SQL 아니다 얻을 필요가
) : user_available에서

SELECT * WHERE NOT user_available.User.Role.role_id = 7 정말이 하나

편집에 붙어

: 내가 잘 모르겠다. 테이블은 이미 매핑되어 있고 Doctrine은 INNER JOIN 작업을 수행합니다. 나는 긴 기다렸다 관리자를 얻기 위해이 코드를 사용하고 있지만, 지금은 사용자가 필요합니다

$admin = Doctrine_Query::create() 
     ->select('c.id') 
     ->from('Chat_available c') 
     ->where('c.User.Roles.role_id = ?', 7) 
     ->groupBy('c.id') 
     ->orderBy('c.created_at ASC') 
     ->fetchOne(); 

지금 내가 가장 긴 기다렸다 사용자를 얻을 필요가 있지만, 이것은

$admin = Doctrine_Query::create() 
     ->select('c.id') 
     ->from('Chat_available c') 
     ->where('c.User.Roles.role_id != ?', 7) 
     ->groupBy('c.id') 
     ->orderBy('c.created_at ASC') 
     ->fetchOne(); 
작동하지 않습니다

답변

0

이 작업을 수행하려면 당신이 t을 사용하고있을 수 있습니다 생각 user_available.id 그러나

을 user.id하는 내부 조인 조인

를 사용하여 먼저 테이블에 가입해야 그 user_available 테이블이 잘못되었습니다. 사용자 테이블에 1 대 1로 매치되므로 사용자 테이블에 is_available 필드가 없습니까?

1

나는 문제가 지금 쯤 사라 졌는지 실현, 그러나 이것은 내가 미래의 독자를 위해 그것을 할 방법은 다음과 같습니다

$admin = Doctrine_Query::create() 
     ->select('c.id') 
     ->from('Chat_available c') 
     ->leftJoin('c.User u') 
     ->leftJoin('u.Roles r') 
     ->where('r.role_id != ?', 7) 
     ->groupBy('c.id') 
     ->orderBy('c.created_at ASC') 
     ->fetchOne(); 
관련 문제