2013-06-05 77 views
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); 

如何我 '(1)調試' 頁面上顯示:

/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 

所以,我可以5

+0

你能告訴你如何將該數組傳遞給谷歌圖表嗎? – Nunser

+0

我的初始代碼後, $ this-> set('output',$ records); 然後我只是在我的視圖中回顯輸出變量。我也用逗號試驗了數據,這隻會給我帶來總和值而不是物理值,因爲某些原因 – user2444539

+0

所以你試圖在js腳本上輸出/ implode一個php變量?或者只是印刷在你的視野和希望最好?用你輸出變量的視圖的確切代碼更新你的問題。有錯誤,所以如果不仔細查看,將很難提供幫助。 – Nunser

回答

0

顯示「表」,而不是我覺得你很有點糊塗了。讓我們一步一步來。

首先,implode連接數組的值,而不是鍵,所以它合乎邏輯地得到輸出,它不是「出於某種原因」。閱讀the docs關於該功能,對了解它的功能非常有幫助。

第二......好吧,從我看到的,你試圖混合使用js的php變量。這是「可能的」,但你需要真正理解你在做什麼。 Google圖表或Highcharts用js構建圖表,至少基於您想要的輸出。奇怪的是,你在控制器中產生了一個變量,並在視圖中打印就像

因此,按原樣將$records變量傳遞給視圖。不要試圖將其轉換爲控制器中的js適當結構。爲什麼?因爲您可以在視圖的任何部分使用$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-發現變量「翻譯」給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變量。

+0

我只是...不知道如何謝謝你。 即使在我花了將近3天的時間研究並試圖找出它之後,它立即進行了第一次嘗試。謝謝。 是的,我非常困惑,因爲這是我的第一個項目,必須與php/js一起工作。我從你的回覆中學到了很多。 再次感謝! – user2444539

+0

很高興幫助:)我完全理解你對php-to-js開發的困惑。爲了將來的參考,類似於js中的'var test'或類似回聲的回聲是要走的路。此外,請檢查'json_encode' [php中的函數](http://php.net/manual/en/function.json-encode.php),它有助於噸。 – Nunser

+0

我有一個非常不同的問題,但在同一個確切的項目。如果你不介意你可以看看嗎?我將在原文中進行編輯。是否在違反規則的同一線索中提出另一個問題? – user2444539