2011-11-17 4 views
1

내가 다음과 같습니다 kohana 프레임 워크에서 쿼리 건물입니다 :Kohana 쿼리 빌더

DB::select('users.email')->from('users', 'roles_users')-> 
where('users.id', '=', 'roles_users.user_id')-> 
and_where('roles_users.role_id', '=', '2'); 

는 것 출력 :

SELECT `users`.`email` FROM `users`, `roles_users` 
WHERE `users`.`id` = 'roles_users.user_id' 
AND `roles_users`.`role_id` = '2' 

그래서 내 문제가 있음을 kohana이 roles_users.user_id에 나를 위해 ' '을두고 그래서 MySQL의를 필드의 실제 값이 아닌 텍스트를 검색합니다. 그것을 해결할 방법이 있습니까?

답변

3

다른 테이블에 가입하지 않는 이유가 있습니까? 그런 : 당신이 마음에 들지 않으면

DB::select('users.email') 
->from('users') 
->join('roles_users', 'LEFT') 
->on('users.id', '=', 'roles_users.user_id') 
->where('roles_users.role_id', '=', '2'); 

DB::select('users.email') 
->from('users', 'roles_users') 
->where('users.id', '=', DB::expr('roles_users.user_id')) 
->and_where('roles_users.role_id', '=', '2'); 
+0

분명히 첫 번째 스 니펫이 해결책입니다. 하지만 두 번째 스 니펫을 사용하는 것이 가능한지 궁금합니다. 어떤 조인도 없으므로 DB가'where ('users.id', '=', DB :: expr ('roles_users.user_id'))'를 어떻게 이해할 것인가? – Kowser

+2

DB :: expr ('blablabla')는 'blablabla'가 쿼리 작성기에 의해 이스케이프되지 않음을 의미합니다. – egis

+0

완벽하게 작동 해 주셔서 감사합니다. – Linas

2

당신이 DB::expr()으로 시도 해 봤나 시도?