Подсчет и классификация экземпляров определенных полей - PullRequest
0 голосов
/ 25 марта 2020

В настоящее время я пишу приложение в стиле опроса, в котором есть несколько моделей:

  • Оценки
  • Рекомендации

Оценка содержит много рекомендаций и присоединяется к таблице оценки_рекоммендации, и я сохраняю в таблице объединения данные, которые фактически являются ответами.

Одним из таких ответов является влияние пользователя. Это поле является целочисленным значением от 0 до 10 и отличается для каждой оценки-> рекомендации.

То, что я хочу сделать, это отправить счет и категоризацию этого поля в представление, чтобы я мог нанесите на карту, используя диаграмму. js. Например, я хотел бы:

  • 0-3 = Низкий
  • 4-7 = Умеренный
  • 8-10 = Высокий

Насколько я могу судить, мне нужно передать что-то вроде:

$ count [4, 6, 8] $ legend ['Low', 'Moderate', 'High']

Итак, в приведенном выше примере 4 оценки-> рекомендации классифицируются как низкие, 6 - умеренные, 8 - высокие.

У кого-нибудь есть советы, как это сделать в моем контроллере? Я читал о коллекциях, но я не уверен, что это правильный способ сделать это. У меня были проблемы, так как мои данные хранятся в части _joinData массива, и я не мог понять, как получить к ним доступ.

Любой совет будет высоко ценится.

Спасибо!

Edit 1

Это код контроллера, с которым я играл, чтобы получить начальную коллекционную работу. Переменная col проходит хорошо, и я вижу это в представлении. Я получаю ошибку 'unknown getter' в строке данных соединения. Из документов мне не совсем понятно, какие переменные есть в примере в книге, поэтому я очень старался, чтобы все комбо, о которых я только мог подумать, попытались заставить его работать, прежде чем даже пытаться двигаться дальше. полный сценарий.

public function view($id = null)
{
    $this->loadModel ('Assessments');
    $this->loadModel ('Recommendations');

    $query = $this->Assessments->find('all', [
        'conditions' => ['Assessments.id =' => $id],
        'contain' => ['Recommendations']
    ]);
    $assessment = $query->first();  

    $collection = new Collection($assessment->ToArray());

    $countHigh = $collection->countBy(function ($assessment) {
        return $assessment->_joinData->_user_impact > 7 ? 'High' : 'Error';
    });


    $this->set('assessments', $assessment);
    $this->set('col', $collection);
    $this->set('user_impact_high', $countHigh);
}

Edit 2

Так что я проверяю это еще немного. Пытаюсь упростить это. Даже использование функции groupBy в ее простой форме дает сбой. Приведенный ниже код генерирует следующую ошибку:

public function view($id = null)
{
    $this->loadModel ('Assessments');
    $this->loadModel ('Recommendations');

    $query = $this->Assessments->find('all', [
        'conditions' => ['Assessments.id =' => $id],
        'contain' => ['Recommendations']
    ]);
    $assessment = $query->first();  

    $collection = new Collection($assessment->ToArray());

    $test = $collection->groupBy('client_id');

    $this->set('assessments', $assessment);
    $this->set('col', $collection);
    $this->set('test', $test);
}

Ошибка:

Невозможно использовать объект типа Cake \ I18n \ FrozenTime в качестве массива

...