首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弄清楚如何以正确的方式输出数据以使图表正常工作

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

Stack Overflow用户
提问于 2013-06-05 16:48:59
回答 1查看 276关注 0票数 0

我一直在努力想办法从我的数据库中获取数据,然后以图表可以读取的方式显示它。

控制器:$this->Record->virtualFields‘’sum‘='COUNT(*)';

代码语言:javascript
复制
    $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);

我的“调试”如何在页面上显示:

代码语言:javascript
复制
/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'
)  

如你所见,由于某种原因,内爆移除了物质字段。我需要它像这样显示:

代码语言:javascript
复制
'Underwear', '1'
etc

编辑:

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

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

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

代码语言:javascript
复制
'5' => '2'

但是我假设需要使用hasMany来关联我的数据库中的内容

代码语言:javascript
复制
ID | Compound
5  | Tables

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 10:20:37

我想你有点糊涂了。让我们一步一步来。

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

第二……好吧,据我所知,你正试图将php变量和js混合在一起。这是“可能的”,但你需要真正理解你在做什么。Google Charts或Highcharts使用js构建图形,至少基于您想要的输出。奇怪的是,您在控制器中内爆了一个变量,并在视图中像这样打印它。

因此,将$records变量按原样传递给视图。不要试图在控制器中将其转换为js适当结构。为什么?因为您可以在视图的任何部分使用$records (作为php变量),并仅在js部分中输出必要的结构。

现在,来看一下图表。假设您使用的是Google图表,因为这是我找到的第一个示例。在您的视图中,您应该有类似以下内容的内容

代码语言:javascript
复制
<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的数据,对吧?为此,您可以这样做

代码语言:javascript
复制
    //the data part
    var data = new google.visualization.DataTable();
    data.addRows([
      <?php
          foreach($records as $compound => $sum)
             echo "['".$compound."', ".$sum."], ";
       ?>
    ]);

而且你应该有你需要的js格式。检查语法,不过,我没有测试它,所以可能有一个逗号或什么,你需要添加到该echo

我希望我说得够清楚了。如果您对这里的任何内容感到困惑,我建议您阅读有关在js中使用php变量的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16935403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档