我正在使用以下声明。
$users = $this->User->find('all');
但是在数据库中只有174行。但查询返回200行。
当我输出内容时,我看到很多行都会重复。
知道为什么在cakephp中出现这种行为?
结构
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.
答案 0 :(得分:2)
您正在运行的查询与CakePHP实际执行的查询几乎不匹配。 CakePHP还将执行所有必需的连接以获取相关数据。所以,这不是你正在进行的正确比较。
您的某些关系可能会返回双重结果,例如User -> CompanyA
,但也可能存在User -> CompanyB
关系,这会为1个用户触发2个结果行。
要查看Cake实际执行的查询,请在数据源上使用getLog方法,例如:
$ds = $this->User->getDataSource();
$log = $ds->getLog();
debug($log);
或者使用类似DebugKit的内容来默认获取包含所有查询的面板(在调试模式下)。