如何计算CakePHP中查询中的记录?

时间:2012-04-19 09:39:03

标签: cakephp-2.0

我有一个非常复杂的问题(无论如何对我来说),我对下一步该做什么感到困惑。

首先,我将向您介绍该项目的背景知识。这个项目是我保留客户记录并列出链接到这些客户的所有服务。我有三张桌子: 顾客 制品 CustomerRecordHub

Customer表和Products表保存有关各方的信息。 CustomerRecordHub表基本上将这两个表链接在一起。因此,该表将保留客户ID和与该客户关联的产品。

因此,如果客户的ID为1,并且该客户有三种产品,那么在产品UD字段中,他们将拥有1,2和3.因此该表将是:

  

ID | CompanyID |产品ID
  1 | 1 | 1
  2 | 1 | 2
  3 | 1 | 3个

我使用CustomerRecordHub表作为主参考表,然后从该表中查询Customer和Product表。我为CustomerRecordHub设置了以下关系:

<?php
public $belongsTo = array(
    'Customer' => array(
        'className' => 'Customer',
        'foreignKey' => 'id',
    ),
    'Product' => array(
        'className' => 'Product',
        'foreignKey' => 'id',
    )
);
?>

我可以查询此表并从其他两个链接表中检索我想要的所有记录而没有任何问题。

现在,我遇到的问题是,在一个页面上我想列出我拥有的所有客户,然后我想要显示每个客户有多少产品。因此,如果我们使用我给出的示例,对于ID为1的客户,有三个产品链接到该客户。因此,在页面上我想显示客户详细信息,在“产品”标题下,我想获得显示的产品数量(在这种情况下,应显示数字3)。

通常我会在SQL中使用COUNT命令,但我试图尽可能严格遵守CakePHP自己的约定,而不是在代码中使用原始SQL。

目前,我正在使用的代码是:

<?php

$this->loadModel('Customerrecordhub');

$customers = $this->Customerrecordhub->find('all', 'recursive' => 2));
$this->set('customers', $customers);

?>

在HTML中,我将所有数据输入到foreach循环内的表中。

我应该用什么来计算记录?

1 个答案:

答案 0 :(得分:1)

find方法有一个特殊的count参数,但这可能不符合您的需求,因为您希望显示的不仅仅是计算的产品。

最好定义COUNT in the fields parameter of the find method。所以:

'fields' => array('Model.field1', 'COUNT(Model.field2) AS products_count')