弄清楚如何以正确的方式输出数据以使图表正常工作

时间:2013-06-05 08:48:59

标签: cakephp highcharts google-visualization

我一直在试图找到一种从我的数据库中获取数据的方法,然后以图表可以读取它的方式显示它。

控制器:         $ this->记录 - > 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'
)  

正如您所看到的,由于某种原因,impload会移除物质场。我需要它显示如下:

'Underwear', '1'
etc

编辑:

我如何使用hasMany为数据库分配化合物id。因为同一化合物会有很多不同的用户。许多不同的化合物将拥有相同的用户。

我正在阅读文档,但我不知道我是否遗漏了一些东西,但似乎它只是随机删除了文档...它似乎只是告诉你它做了什么以及如何启动它。

如果我现在正在运行查询(我编辑了上面的查询以获得此示例),我将获得值

'5' => '2'

但我想,我需要使用hasMany来关联我的数据库中的内容

ID | Compound
5  | Tables

这样我就可以显示'tables'而不是5

1 个答案:

答案 0 :(得分:0)

我觉得你有点困惑。让我们一步一步来。

首先,implode连接数组的值,而不是键,所以你得到那个输出是合乎逻辑的,它不是“出于某种原因”。阅读the docs关于该功能,非常有助于了解它的作用。

第二......好吧,从我看到的,你正在尝试将php变量与js混合。这是“可能的”,但你需要真正理解你在做什么。 Google Charts或Highcharts使用js构建图形,至少基于您想要的输出。你在控制器中插入变量并在视图中将其打印出来就像一样,这很奇怪。

因此,将$records变量原样传递给视图。不要试图将其转换为控制器中的js-sufficient-structure。为什么?因为您可以在视图的任何部分使用$records(作为php变量),并在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变量。