包含cakephp中的Group By

dba5bblo  于 2022-11-12  发布在  PHP
关注(0)|答案(2)|浏览(156)

我想在cakephp的contain中使用group by。在下面的例子中,我只想在organizationUser数组中使用不同的组织。

$options = array(
        'conditions' => array('User.' .$this->User->primaryKey => $userId), 
        'contain' => array(
                        'OrganizationUser'=>array(
                            'conditions'=>['status'=>3],
                            'group'=> array( 'OrganizationUser.organization_id')),
                        'OrganizationUser.Organization',
                        'OrganizationUser.Organization.Noticeboard',
                        'OrganizationUser.Organization.Newsboard',
                        'OrganizationUser.Organization.Noticeboard.Branch',
                    ),
        'page'=>$page,
        'limit'=>$limit
        );

        $org = $this->User->find('all', $options);

但这会引发类似“未找到列”的错误,并且“条件”在OrganizationUser中工作正常,但“组”不工作。我使用的是cakephp版本2。

z18hc3ub

z18hc3ub1#

我不认为cakephp 2+提供了一些像你正在做的那样使字段在容器中不同的东西。所以最好尝试以下操作。

'group'=> array( 'OrganizationUser.organization_id')

执行人

'fields'=> array( 'DISTINCT OrganizationUser.organization_id')

可能对你有用。

soat7uwm

soat7uwm2#

在我的情况下,我使用的蛋糕版本4+。
在我的表中,我所建立的关系

$this->belongsTo('CreatedOperator')
      ->setClassName(USERS_PLUGIN . '.Users')
      ->setForeignKey('created_by')
      ->setJoinType('INNER')
   ;

我把这个关系叫做

$query
        ->disableHydration()
        ->select([
            'CreatedOperator.id',
            'CreatedOperator.first_name',
            'CreatedOperator.last_name',
            'full_name' => $query->func()->concat(['CreatedOperator.first_name' => 'identifier',' ','CreatedOperator.last_name' => 'identifier']),
            'total' => $query->func()->count('CreatedOperator.id')])
        ->contain(['CreatedOperator'])
        ->group(['CreatedOperator.id'])
        ;

    return $query->toList();

相关问题