CakePHP查找功能

时间:2012-09-15 11:58:17

标签: cakephp cakephp-2.1 cakephp-2.2

我正在使用以下声明。

$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 ;

尝试使用此声明进行调试

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

我自己得到200.

模特:http://pastebin.com/p4bFPiUz

1 个答案:

答案 0 :(得分:2)

您正在运行的查询与CakePHP实际执行的查询几乎不匹配。 CakePHP还将执行所有必需的连接以获取相关数据。所以,这不是你正在进行的正确比较。

您的某些关系可能会返回双重结果,例如User -> CompanyA,但也可能存在User -> CompanyB关系,这会为1个用户触发2个结果行。

要查看Cake实际执行的查询,请在数据源上使用getLog方法,例如:

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

或者使用类似DebugKit的内容来默认获取包含所有查询的面板(在调试模式下)。