0

私はかなり複雑な問題を抱えており(とにかく私にとって)、次に何をすべきかについて行き詰まっています。

まず、プロジェクトの背景について説明します。このプロジェクトは、私が顧客を記録し、これらの顧客に関連するすべてのサービスを一覧表示するためのものです。3 つのテーブルがあります: Customer Products CustomerRecordHub

Customer テーブルと Products テーブルには、それぞれの関係者に関する情報が保持されます。CustomerRecordHub テーブルは、基本的にこれら 2 つのテーブルをリンクします。そのため、テーブルには顧客 ID と、その顧客に関連付けられている製品が保持されます。

したがって、顧客の ID が 1 で、その顧客が 3 つの製品を持っている場合、Products UD フィールドには 1、2、および 3 が含まれます。したがって、テーブルは次のようになります。

ID | 会社 ID | 製品 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',
    )
);
?>

このテーブルにクエリを実行し、他の 2 つのリンクされたテーブルから必要なすべてのレコードを問題なく取得できます。

さて、私が抱えている問題は、1 つのページにすべての顧客をリストし、その隣に各顧客が持っている製品の数を表示したいということです。したがって、私が示した例を使用すると、ID が 1 の顧客の場合、この顧客にリンクされた 3 つの製品があります。そのため、ページに顧客の詳細を表示し、「製品」という見出しの下に、表示される製品の数を取得したいと考えています (この場合、番号 3 が表示されるはずです)。

通常、私は SQL で COUNT コマンドを使用しますが、コードをできるだけ CakePHP 独自の規則に厳密に保ち、コード内で生の SQL を使用しないようにしています。

現在、私が使用しているコードは次のとおりです。

<?php

$this->loadModel('Customerrecordhub');

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

?>

HTML では、すべてのデータを foreach ループ内のテーブルに送り込んでいます。

レコードを数えるには何を使用すればよいですか?

4

1 に答える 1

1

メソッドには特別なcountパラメータがありfindますが、カウントされた製品以上のものを表示したいので、おそらくそれはあなたのニーズに合わないでしょう。

メソッドCOUNT fieldsパラメータでfind定義するのが最善です。それで:

'fields' => array('Model.field1', 'COUNT(Model.field2) AS products_count')
于 2012-04-19T10:51:38.167 に答える