2012-09-15 134 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 –