【问题标题】:CakePHP, counting values form joined tableCakePHP,从连接表中计算值
【发布时间】:2018-10-16 15:19:09
【问题描述】:

你能帮我处理一下 CakePHP 查询代码吗?我设法制作了 MySQL 代码,但我无法将其转换为 CakePHP

这里是 MySQL 代码

SELECT team_name, count(team_members.id)
FROM teams
LEFT JOIN team_members ON teams.id = team_members.team_id
WHERE teams.user_id = 15
GROUP BY teams.id

这是我尝试从 CakePHP 获取代码的方式:

$email = $this->request->getQuery('email');
        $user = $this->Users
            ->find('all')
            ->where(['email' => $email])->first();

        $options = array(
            'joins' =>
                array(
                    array(
                        'table' => 'TeamMembers',
                        'alias' => 'TeamMembers',
                        'type' => 'left',
                        'foreignKey' => false,
                        'conditions'=> array('TeamMembers.team_id = Teams.id')
                    ),
                ),
        );

        $teams = $this->Teams->find('all', $options)
            ->select(["team_name","id",'count_members' => 'count(*)'])
            ->where(['Teams.user_id' => $user->id])
            ->group(['Teams.id']);

【问题讨论】:

  • 如果你的表被命名为team_members,那么这应该是你连接的table键中的内容,而不是TeamMembers。 CamelCased 版本应保存在别名和其他地方。

标签: join cakephp cakephp-3.0 query-builder


【解决方案1】:

试试这个:

    $teams = \Cake\ORM\TableRegistry::get('Teams');

    $query = $teams->find();

    $res = $query
            ->select([
                'team_name',
                'count' => $query->func()->count('team_members.id')
            ])
            ->join([
                'table' => 'team_members',
                'type' => 'LEFT',
                'conditions' => 'teams.id = team_members.team_id',
            ])
            ->group('teams.id');

【讨论】:

    【解决方案2】:
    $teams=$this->Team->find('all',array(
                        'recursive'=>-1,
                        'conditions'=>array('Team.user_id = 15'),                                                                                
                        'joins'=>array(
                                    array('table'=>'team_members',
                                          'alias'=>'TeamMember',
                                          'type'=>'left',
                                          'conditions'=>array(
                                               'Team.id = TeamMember.team_id',
                                           ),
                                        ),
                                ),
                        'fields'=>array(
                                    'count(TeamMember.id) as total_team_members',
                                    'Team.team_name'
                                ),
                        'group' =>array('Team.id ASC'),                                                     
    
                    )                
            );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2013-08-11
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多