2012-09-15 3 views
2

다음 문장을 사용하고 있습니다.CakePHP 찾기 기능

그러나 데이터베이스에는 174 개의 행만 있습니다. 그러나 쿼리는 200 개의 행을 반환합니다.

콘텐츠를 넣을 때 많은 행이 반복되는 것을 볼 수 있습니다.

cakephp에서이 문제가 발생하는 이유는 무엇입니까? 이 한 Statment

echo $users = $this->User->find('count'); 

를 사용하여 디버깅을 시도하여

enter image description here

구조

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(255) NOT NULL, 
    `last_name` varchar(255) NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `username` varchar(255) NOT NULL, 
    `password` varchar(40) NOT NULL, 
    `display_photo` varchar(255) DEFAULT NULL, 
    `subscription_plan_id` int(11) unsigned NOT NULL, 
    `company_id` int(11) NOT NULL, 
    `status` tinyint(2) NOT NULL, 
    `created` datetime NOT NULL, 
    `modified` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=177 ; 

내가 200 자체를 얻는다.

모델 : http://pastebin.com/p4bFPiUz

+0

사용자의 모델 구조를 보여주십시오. 다른 테이블과 관계가 없습니까? –

+0

업데이트 된 질문 –

+0

모델의 코드를 보여주십시오 사용자 –

답변

2

당신이 거의 CakePHP를 실제로 실행할 쿼리와 일치하지 않는 실행하는 쿼리. CakePHP는 관련 데이터를 얻기 위해 필요한 모든 조인을 수행합니다. 그래서, 이것은 실제로 당신이하는 적절한 비교가 아닙니다.

관계 중 일부는 User -> CompanyA과 같이 두 번 결과를 반환 할 수 있지만 User -> CompanyB 관계가있을 수 있으며 이는 1 명의 단일 사용자에 대해 2 개의 결과 행을 트리거합니다.

는 케이크가 실제로 실행 쿼리를 참조처럼, 당신의 데이터 소스에의 getLog 방법을 사용하려면

$ds = $this->User->getDataSource(); 
$log = $ds->getLog(); 
debug($log); 

또는 디버그 모드에서 때 (기본적으로 모든 쿼리 패널을 얻을 수 DebugKit 같은 것을 사용).

+0

또는 내가 포함 된 것을 사용해야 만 내가 원하는 것을 얻을 수 있습니까? –

+2

@HarshaMV 성능면에서 containable은 항상 모든 것을 가져 오는 것이 낫다. 그래서 모든 데이터를 실제로 필요로하지 않는다면 항상 옵션이다. – Oldskool

+0

감사합니다 그것은 잘 작동합니다 : D –