2

我正在使用以下语句。

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

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

4

1 回答 1

2

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

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

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

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

或者使用DebugKit 之类的工具来获取默认情况下包含所有查询的面板(在调试模式下)。

于 2012-09-15T12:38:46.010 回答