find('count')和find('all')cakePHP之间的行为差异

find('count')和find('all')cakePHP之间的行为差异,php,cakephp,model,controller,findall,Php,Cakephp,Model,Controller,Findall,我在CakePHP中遇到了一个奇怪的问题 $this->something->find('count'); 还可以完美地工作 $this->something->find('all'); 不返回任何内容,甚至不返回空数组、任何错误或任何内容 编辑:结果我得到一个sql错误:sql错误:1054:未知列-对于确实存在的列。users.display_name在下面的sql查询中: SELECT item.id, item.name, item.description

我在CakePHP中遇到了一个奇怪的问题

$this->something->find('count'); 
还可以完美地工作

$this->something->find('all'); 
不返回任何内容,甚至不返回空数组、任何错误或任何内容

编辑:结果我得到一个sql错误:sql错误:1054:未知列-对于确实存在的列。users.display_name在下面的sql查询中:

SELECT item.id, item.name, item.description, item.user_id, users.display_name FROM item LEFT JOIN users ON (item.user_id = users.id);
我也尝试过使用findAllBy和paginate paginate实际上就是我想做的——尽管从我收集的资料来看,paginate和find'all在功能上非常相似

奇怪的是,find'all'在其他任何地方都起作用——只是在这个特定的控制器中,它的行为很奇怪。我没有得到任何错误,只是一个空的结果


我想我可能忽略了一些非常简单的事情,但是任何帮助都是非常感谢的。谢谢

行为差异的具体问题是find'count'将在数据库上运行基本count*查询,以确定行数

但是,find'all运行不同的查询,如果您提供的SQL是它试图使用的SQL,那么它是无效的:

SELECT item.id, item.name, item.description, item.user_id, users.display_name LEFT JOIN users ON (item.user_id = users.id);
没有“从什么中选择”的声明,如果您没有自定义您的项目、用户或应用程序模型,请将$useTable=false设置为可能?你正在处理一个不寻常的错误


如果这些模型在其他控制器中运行良好,需要注意的一件事是对每个控制器中每个模型的属性进行任何更改。除非每个控制器中都有代码告诉它,否则它们在每个控制器上的行为不会有所不同。

因此,根据我们的讨论,您遇到的问题是虚拟字段。请查看,更具体地说是和部分

从上面的描述来看,您在虚拟字段中指定了一个联接,这将导致您看到的错误,因为它将在From之前添加联接。如果您坚持使用虚拟字段,我建议您重写它以使用子查询。确保子查询只返回1列

例如:

或者,如果需要,可以使用绑定必要的模型并更改查询参数


如果您不明白,请发布您的模型,我会帮助您。

您是否尝试查看SQL输出?这通常是一个非常好的IndicatorCaePHP版本?另外-findcount返回的是什么?整数值?var_dump$this->something->find'all';将准确地告诉您它返回的内容。所以您根本没有得到任何输出?听起来像是黑洞或是内存不足的问题…@BarryChapman:SQL输出显示SQL错误:1054:确实存在的列的未知列-所以这可能是模型中的问题?啊,这就是我不复制和粘贴得到的结果。它确实有我刚刚编辑的主要帖子中的声明来反映这一点。然而,检查每个控制器的差异绝对是一个好主意——我将检查使用这个特定模型的每个控制器。这让我朝着正确的方向前进。谢谢你的帮助!
public $virtualFields = array(
    'count' => 'SELECT COUNT(*) FROM stacks Stack'
);