2014-03-12 4 views
-1

내가CakePHP의 사용자 정의 쿼리는 CakePHP의 표준

SELECT m1.mid, 
    users.id AS userid, users.name, users.lname 
    FROM 
    chat_messages AS m1, 
    chat_messages AS m2, 
    users 
    WHERE (
      (
       m1.user1 = "' . $logged_user . '" 
       AND users.id = m1.user2 
       AND m1.user1alldel = "0" 
       AND m1.user1allarchive = "0" 
      ) 
      OR (
       m1.user2 = "' . $logged_user . '" 
       AND users.id = m1.user1 
       AND m1.user2alldel = "0" 
       AND m1.user2allarchive = "0" 
       ) 
     ) 
      AND m1.mid2 = "1" 
      AND m2.mid = m1.mid 
    GROUP BY m1.mid 
    ORDER BY m1.modified DESC 

사람이 CakePHP의 정의에서이 쿼리를 사용하는 방법에 저를 도와 주실 수있는 메시징 시스템에 대해 다음과 같이 사용자 지정 쿼리를 만드는 중이라서로 변환 페이지 매김 또는 일반적인 찾기 쿼리에서.

나는 클라이언트가 붙어있어이 작업을 빨리 처리해야합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

쿼리 매김 당신은 예를 들어, 자신의 찾기 방법을 추가해야
CUSTOM 들어 동일한 모델에서 - 사용자 모델) 고유의 방법/기능 _findChatUsers

protected function _findChatUsers($state, $query, $results = array()) { 
     if ($state === 'before') { 
       // debug($query); die(); // to see Your query 
       // ... modify Your query 

      return $query; 
     } 
     return $results; 
    } 

찾을 수 CakePHP의 대해 자세히 알아 $ PARAMS : http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find 다음 같이 귀하의 질의을 수정

$query['fields'] = array('User.id', 'User.lname', '...'); 
$query['joins'] = array('INNER JOIN chat_messages AS m1...'); 
$query['conditons'] = array('User.id' => '...'); 
$query['group'] = array('User.id'); 
$query['order'] = array('User.id' => 'ASC'); 

또는 빠른 방법 :

 $options = array(
      'fields' => array('...'), 
      'joins' => array('...'), 
      // ... 
     ); 
     $query = Set::merge($query, $options); 

SET::functions에 대한 ... 마지막으로 귀하의 컨트롤러 (사용자 Controller.php)와 같이 데이터를 검색하십시오 :

$this->paginate = array('chatUsers', 
    'limit' => 6, 
); 
$posts = $this->paginate($this->User); 
$this->set('posts', $posts);