2012-07-06 3 views
1

내 검색어를 찾으십시오;'and', 'or'절을 사용하여 CakePHP 콤플렉스 조건을 찾습니다.

//here $u_id is id of the users table retrieved using session variable 

$this->User->Request->find("all",array("conditions" =>array("request.status" => "friends" , 
"OR" => array("request.friend_id" => "$u_id","request.user_id" => "$u_id")))); 

에 해당 SQL 쿼리는 다음과 같습니다 -

SELECT `Request`.`id`, `Request`.`user_id`, `Request`.`friend_id`, `Request`.`status`, `User`.`id`, `User`.`name`, `User`.`email`, `User`.`password`, 
FROM 
`myblog`.`requests` AS `Request` JOIN `myblog`.`users` AS `User` 
ON 
(`Request`.`friend_id` = `User`.`id`) 
WHERE 
((`request`.`friend_id` = 3) OR (`request`.`user_id` = 3)) AND `request`.`status` = 'friends' 

내가 원하는 결과를 얻을 수있는 위의 SQL 쿼리 'ON'후 다음 줄을 원하는 반면 :

`Request`.`user_id` = `User`.`id` OR `Request`.`friend_id` = `User`.`id` 

무엇 find() 메소드 에서 변경해야합니까, 아니면 모델을 변경해야합니까?

내 테이블은 다음과 같습니다

사용자 (ID, 이름, 비밀번호, 이메일)
요청 (ID, USER_ID 사용자 테이블 (ID),
friend_id (사용자 테이블의 ID), 상태)

답변

0

모델에 조건을 지정할 수 있습니다.

public $belongsTo = array('User' => array('className' => 'Request', 
              'foreignKey' => 'user_id', 
              'conditions' => array('OR' => array('Request.user_id' => 'User.id', 'Request.friend_id' => 'User.id') 
             )) 
         ); 
당신이 나에게 말했다 나는 정확히 한
+0

,하지만 난 SQL 쿼리에 'ON'는 후 다음 얻고이 시간 : - ('Request'.'friend_id' ='User'.'id' AND (('Request'.'user_id' = 'User.id') OR ('Request'.friend_id' = 'User.id'))) –

+0

이 경우를 제 기계로 만들고 있습니다. 그 동안 다음 링크를 참조 할 수 있습니다 : http://book.cakephp.org/1.3/view/1047/Joining-tables –

+0

괜찮습니다. 긍정적 인 응답을 기다리고 있습니다. 고맙습니다. –

관련 문제