1

コントローラーで、グラフ化する配列を作成します

function chart() {  
    $results = $this->Visit->query(
        "SELECT date(visits.created) as visit_date, 
            Count(visits.id) AS count_visits
            FROM visits
            GROUP BY date(visits.created)"
    );

    foreach($results AS $result) {
        $row = array(
            $result[0]['visit_date'],
            $result[0]['count_visits']          
        );
        $chartData[] = json_encode($row);
    }

    pr($chartData);

}

pr($ chartData)は次の配列を提供します

Array
 (
    [0] => ["2012-07-11","5"]
    [1] => ["2012-07-13","1"]
    [2] => ["2012-07-14","1"]
)

チャートビューで私は持っています

google.load('visualization', '1.0', {'packages':['corechart']});

google.setOnLoadCallback(drawChart);

function drawChart() {
    // Create the data table.

    var data = google.visualization.arrayToDataTable($chartData);

    var options = {
      title: 'Visits by Date',
      hAxis: {title: 'Date', titleTextStyle: {color: 'black'}}
    };

    var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }

しかし、これは私にチャートを取得しません..エラーなし...チャートなし..

ビューをテストするために手動で配列を入力すると、正常に機能します...たとえば、..を置き換えた場合。

var data = google.visualization.arrayToDataTable($chartData);

Google Chartの例の次の形式を使用すると、優れた縦棒グラフが生成されます

    var data = google.visualization.arrayToDataTable([
              ['Date',  'Count'],  
      ['2012-07-11',  5],
      ['2012-07-13',  1],
      ['2012-07-14',  1]
    ]);

いくつかの質問:-varデータ配列のヘッダータイトルを取得するにはどうすればよいですか?-配列内の二重引用符または一重引用符は違いを生みますか?-配列$chartDataをphpからGoogleチャートjavascriptに正しく渡しますか?-Googleの例では、配列の周りに「[]」がありますが、配列の周りにもそれらを取得するにはどうすればよいですか?

(bwt、私はcakephpのFind(all)についてすべて知っていますが、私が欲しいものを取得する方法についてのドキュメントに迷いました、そしてsqlははるかに簡単でした)

4

1 に答える 1

0

コントローラでjson_encodeを使用していますが、ビューでは-を使用しています

google.visualization.arrayToDataTable($chartData);

json_encodeは、javascript配列ではなく、jsonオブジェクトを作成します。

コントローラの関数chart()でjson_encodeを使用してみてください:

$chartData['cols'] = array(
    array('id' => 'visit_date', 'label' => 'Visit date', 'type' => 'date'),
    array('id' => 'count_visits', 'label' => 'Count', 'type' => 'number')
);
foreach($results AS $result) {
    $time = strtotime($result[0]['visit_date']);
    $dateJs = 'Date('.date("Y", $time).', '.(date('n', $time) - 1).', '.date('j', $time).')';
    $row = array(
        'c' => array(
            array('v' => $dateJs),
            array('v' => $result[0]['count_visits']),
         )
    );
    $chartData['rows'][] = $row;
}
//make the data available for view
$this->set('chartData', json_encode($chartData);

あなたの見解では使用:

var data = new google.visualization.DataTable($chartData);
于 2012-08-07T10:12:17.750 に答える