2012-09-15 94 views
2

我用下面的語句。CakePHP的查找功能

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

但是在數據庫中只有174行。但查詢返回200行。

當我出來把我的內容看到,很多行是重複的。

任何想法,爲什麼這種行爲在CakePHP中?

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 ; 

通過嘗試使用該statment

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

調試我得到200本身。

型號:http://pastebin.com/p4bFPiUz

+0

顯示用戶的模型結構,不要你與其他表的任何關係? –

+0

更新問題 –

+0

顯示更新的問題@MoyedAnsari –

回答

2

您正在運行不近匹配CakePHP就會在實際執行查詢的查詢。 CakePHP還將執行所有必需的連接以獲取相關數據。所以,這不是你正在做的一個適當的比較。

您的某些關係可能會返回雙重結果,例如User -> CompanyA,但也可能存在User -> CompanyB關係,這將觸發1個單個用戶的2個結果行。

要查看蛋糕實際執行的查詢,請使用getLog方法對你的數據源,如:

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

或者使用像DebugKit東西拿到面板默認情況下所有的查詢(在調試模式下)。

+0

或我應該使用包含來確保我只得到我想要的東西? –

+2

@HarshaMV對於性能來說,可容納總是更好,然後提取所有內容,所以如果你實際上並不需要所有的數據,這總是一個選項。 – Oldskool

+0

感謝它與可容納的工作正常:D –