В настоящее время я пишу приложение в стиле опроса, в котором есть несколько моделей:
Оценка содержит много рекомендаций и присоединяется к таблице оценки_рекоммендации, и я сохраняю в таблице объединения данные, которые фактически являются ответами.
Одним из таких ответов является влияние пользователя. Это поле является целочисленным значением от 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 в качестве массива