Cakephp 找出如何以正确的方式输出数据以使图表正常工作

Cakephp 找出如何以正确的方式输出数据以使图表正常工作,cakephp,highcharts,google-visualization,Cakephp,Highcharts,Google Visualization,我一直在想办法从数据库中获取数据,然后以图表可以读取的方式显示数据 控制器: $this->Record->virtualFields['sum']='COUNT(*) 我的“调试”在页面上的显示方式: /app/Controller/RecordsController.php (line 72) array( 'Trees' => '2', 'Socks' => '1', 'Things' => '9', 'Mice' => '1', 'Clothes' => '

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

控制器: $this->Record->virtualFields['sum']='COUNT(*)

我的“调试”在页面上的显示方式:

/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个,我想你有点困惑了。让我们一步一步来

首先,
内爆
连接数组的值,而不是键,因此您得到输出是合乎逻辑的,而不是“出于某种原因”。了解这个函数,了解它的功能非常有帮助

第二。。。嗯,从我看到的情况来看,您正在尝试将php变量与js混合。这是“可能的”,但你需要真正理解你在做什么。GoogleCharts或Highcharts使用js构建图形,至少基于您想要的输出。奇怪的是,你在控制器中内爆一个变量,然后像在视图中那样打印它

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

现在,图表。假设你使用谷歌图表,因为这是我发现的第一个例子。在你看来,你应该有类似的东西

<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],
    ]);

//你的图表的定义,我不打算在这里这样做
//数据部分
var data=new google.visualization.DataTable();
data.addRows([
[‘蘑菇’,3],
[‘洋葱’,1],
[Olives',1],
]);
这就是您要将php find变量“转换”为js的数据,对吗?为此,你可以这样做

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

你能告诉我你是如何把这个数组传递给谷歌图表的吗?在我的初始代码之后,$this->set('output',$records);然后我只是在我的视图中回显输出变量。我还尝试用逗号内插数据,由于某些原因,这只会给我留下求和值,而不是实质值。因此,您尝试在js脚本上输出/内插php变量?或者只是在您的视图中打印它并希望得到最好的结果?请使用准确的值更新您的问题查看您将变量输出到的代码。存在错误,因此如果不查看它,将很难提供帮助。感谢您的回复,我用我使用的完整代码和获得的输出更新了原始帖子。我只是…不知道如何感谢您。第一次尝试就立即修复了它,即使在我花了近3天的时间研究之后谢谢。是的,我非常困惑,因为这是我第一个与php/js合作的项目之一。我从你的回复中学到了很多。再次感谢!非常高兴能提供帮助:)我完全理解你对php到js开发的困惑。为了将来的参考,像js中的
var测试那样的回音或类似的东西是最好的选择。另外,检查
json\u encode
,这对我很有帮助。我有一个非常不同的问题,但是在同一个项目上。如果你不介意的话,你可以看看吗?我来看看是不是在原来的帖子里。是不是在同一个帖子里问了另一个问题违反了规则?如果你还有其他问题,那么,首先,试着四处搜索。如果没有任何效果,你可以问另一个问题,不要编辑这个问题,不管它是否与同一个项目有关。发布所有必要的代码,让我们来帮助你,并清楚地解释是什么你正在尝试做什么,错误是什么,你做了什么来修复它,所以用户会尝试给你一个有用的答案:)但是先做一个彻底的搜索!
    //the data part
    var data = new google.visualization.DataTable();
    data.addRows([
      <?php
          foreach($records as $compound => $sum)
             echo "['".$compound."', ".$sum."], ";
       ?>
    ]);