Используя группу в cakePHP, мы можем получить уникальные записи, но мне нужно знать, сколько записей дублируется?Я пробовал -> formatResults, -> virtualFields,
'fields' => array('Table.column', 'count(*) as virtualColumn'),
'group' => array('Table.column HAVING COUNT(*) >= 1'),
Но это тоже не поможет.Мне нужно получить это:
Массив ([A] => 10 [B] => 20 [C] => 30)
Ниже приведен код, которыйработал для меня:
$conditions = ['TableA.AnyColumn'=> $id];
$this->loadModel('TableA');
$this->TableA->belongsTo('TableB', [
'className' => 'TableB',
'propertyName' => 'table_b',
'foreignKey' => false,
'joinType' => 'LEFT',
'conditions' => ['TableB.any_column = TableA.any_column', 'TableB.some_other_column = TableA.some_other_column']
]);
------- Здесь я получаю счет -------
$count = $this->TableA->find()->where($conditions)->group(['columnToBeGroupBy']);
$count = $count->select(['columnToBeGroupBy', 'count' => $count->func()->count('TableA.columnToBeGroupBy')])->toArray();
-------Здесь я получаю счет -------
$this->paginate = [
'contain' => ['TableC' => ['fields'=>['fields required']]],
'conditions' => $conditions,
'group' => 'TableA.columnToBeGroupBy',
'limit' => 20,
'order' => ['TableC.modified' => 'DESC']
];
$result = $this->paginate($this->TableA);
$data['result'] = $result;
$data['pagination'] = $this->request->getParam('paging.TableA');
$data['count'] = $count;
Есть ли другой способ уменьшить код, например, использовать виртуальные поля или что-нибудь еще?