Как посчитать сгруппированные (groupby / group) записи в cakePHP с моей текущей проблемой? - PullRequest
1 голос
/ 18 июня 2019

Используя группу в 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;

Есть ли другой способ уменьшить код, например, использовать виртуальные поля или что-нибудь еще?

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

ты пробовал

$this->loadModel('Articles');
$query = $this->Articles->find()->where($conditions)->group(['anyColumn']);
$query->select(['count' => $query->func()->count('Articles.anyColumn')])->toArray();

$this->paginate($query);
0 голосов
/ 18 июня 2019

Вы можете попробовать это:

В контроллере в Paginator вы можете использовать так:

  $itemads = $this->paginate($itemads, ['contain' => ['Departments', 'Stores'],'group'=>'upc','fields'=>array("upc_count"=>"COUNT(`upc`)")]);
...