0

データベースからデータを取得し、グラフで読み取れるように表示する方法を見つけようとしています。

コントローラー: $this->Record->virtualFields['sum'] ='COUNT(*)';

    $records=$this->Record->find('list', 
        array('fields' => array('drug_id', 'sum'), // from the table 'drugs' with 2 fields which drug_id and drug
            'group'  => 'drug_id'));
    debug($records);
    $chartData[] = implode(', ',$records);
    debug($chartData);

ページでの「デバッグ」の表示方法:

/app/Controller/RecordsController.php (line 72)
array(
'Trees' => '2',
'Socks' => '1',
'Things' => '9',
'Mice' => '1',
'Clothes' => '6',
'Shoes' => '4',
'Underwear' => '3',
'Tables' => '6',
'Mouse' => '1'
)
/app/Controller/RecordsController.php (line 74)
array(
(int) 0 => '2, 1, 9, 1, 6, 4, 3, 6, 1'
)  

ご覧のとおり、インロードは、何らかの理由で、substance フィールドを削除します。次のように表示する必要があります。

'Underwear', '1'
etc

編集:

hasMany を使用して、化合物にデータベースの ID を割り当てるにはどうすればよいでしょうか。同じ化合物に多くの異なるユーザーがいるからです。そして、多くの異なる化合物に同じユーザーがいます。

ドキュメントを読んでいますが、何か不足しているかどうかはわかりませんが、ドキュメントがランダムに切り取られているようです...それが何をし、どのように開始するかを示しているようです.

今すぐクエリを実行すると(この例では上記のクエリを編集しました)、次の値を取得します

'5' => '2'

しかし、データベースにあるものを関連付けるために hasMany を使用する必要があると思います。

ID | Compound
5  | Tables

5の代わりに「テーブル」を表示できるように

4

1 に答える 1

0

あなたはかなり混乱していると思います。一歩一歩進んでみましょう。

まず、implodeキーではなく配列の値を連結するため、その出力を取得するのは論理的であり、「何らかの理由で」ではありません。その機能に関するドキュメントを読んでください。それが何をするかを知るのに非常に役立ちます。

第二に...まあ、私が見たところ、あなたはphp変数とjsを混ぜようとしています。それは「可能」ですが、自分が何をしているのかを本当に理解する必要があります。Google Charts または Highcharts は、少なくとも必要な出力に基づいて、js を使用してグラフを作成します。コントローラーで変数を内破し、ビューでそのように出力するのは奇妙です。

したがって、$records変数をそのままビューに渡します。コントローラで js-adequate-structure に変換しようとしないでください。なんで?ビューの任意の部分で (php 変数として)使用でき$records、必要な構造を js 部分だけに出力できるためです。

さて、グラフです。Google チャートを使用しているとしましょう。これは私が最初に見つけた例です。あなたの見解のどこかに、これに似たものがあるはずです

<script type="text/javascript">
    //definitions of your chart, I'm not going to do that here

    //the data part
    var data = new google.visualization.DataTable();
    data.addRows([
      ['Mushrooms', 3],
      ['Onions', 1],
      ['Olives', 1],
    ]);

これは、php-find-variable から js に「変換」したいデータですよね? そのために、このようなことができます

    //the data part
    var data = new google.visualization.DataTable();
    data.addRows([
      <?php
          foreach($records as $compound => $sum)
             echo "['".$compound."', ".$sum."], ";
       ?>
    ]);

そして、必要なjs形式が必要です。ただし、構文を確認してください。テストしていないため、コンマまたはそれに追加する必要があるものがある可能性がありますecho

私はそれを十分に明確にしたことを願っています。ここで何か混乱している場合は、js での php 変数の使用について読むことをお勧めします。

于 2013-06-06T02:20:37.363 に答える