yii2: динамические dosamigos HighCharts из базы данных - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно сгенерировать динамические Highcharts, получить данные из базы данных, поэтому я попытался следовать примеру здесь:

https://github.com/2amigos/yii2-highcharts-widget

в My Controller:

public function actionReports()
{
   $data= User::find()
        ->select(['COUNT(*) AS count,gender '])
        ->groupBy(['gender'])
        ->all();
    return $this->render('reports',[
        'data' => $data,
    ]);
}

в моем представлении:

<?php 
use dosamigos\highcharts\HighCharts;



      foreach ($data  as $user) {
          $gender= "['name'=>'".$user->gender."','data'=>[".$user->count."]],";
          print_r($gender);
       }
 echo \dosamigos\highcharts\HighCharts::widget([
'clientOptions' => [
    'chart' => [
            'type' => 'bar'
    ],
    'title' => [
         'text' => 'By Gender'
         ],

    'yAxis' => [
        'title' => [
            'text' => 'Genders'
        ]
    ],
    'series' =>[ $gender,]
]
 ]);
?>

но после этого что-то не так, потому что диаграммы не появляются, но в $gender есть данные, которые должны быть для работы диаграмм:

['name' => 'female', 'data' => [1]], ['name' => 'male', 'data' => [4]],

`

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Highchart требует данные в виде целого числа, но активная запись возвращает их в виде строки. Мы должны ввести данные приведения к целому числу.

$data = User::find()
    ->select(['COUNT(*) AS count,gender'])
    ->groupBy('gender')
    ->asArray()
    ->all();

foreach ($data  as $user) {
    $gender[] = ['name' => $user['gender'], 'data' => [(int) $user['count']]];
}

echo HighCharts::widget([
    'clientOptions' => [
        'chart' => [
            'type' => 'bar',
        ],
        'title' => [
            'text' => 'By Gender',
        ],
        'yAxis' => [
            'title' => [
               'text' => 'Genders',
            ],
        ],
        'series' => $gender
    ],
]);
0 голосов
/ 18 июня 2019

вы пытаетесь создать строку, в которой, как и должно быть, набор массивов

$gender= "['name'=>'".$user->gender."','data'=>[".$user->count."]],";

должен быть похож на

$gender[] = ['name' => $user->gender, 'data' => [$user->count]];

и вы предоставляете правильные значения?также вы используете модель ActiveRecord для запроса и выбора псевдонима. Вы должны объявить $count как открытое свойство в модели User, иначе он никогда не будет отображаться или использовать \yii\db\Query в противном случае.

Также явы не можете видеть xAxis в вашем коде, возможно, вам придется добавить данные для xAxis, например

    'xAxis'=>
    [
        'categories'=>
        [
            'Male',
            'Female'
        ]
    ]

, и самое главное, вам нужно добавить $gender, как показано ниже

echo \dosamigos\highcharts\HighCharts::widget([
    'clientOptions' => [
        'chart' => [
            'type' => 'bar'
        ],
        'title' => [
            'text' => 'By Gender'
        ],

        'xAxis' =>[
            'categories' =>
            [
                'Male',
                'Female'
            ]
        ],
        'yAxis' => [
            'title' => [
                'text' => 'Genders'
            ]
        ],
        'series' => $gender
    ]
]);
...