CakePHP, подсчет значений из объединенной таблицы - PullRequest
0 голосов
/ 16 октября 2018

Можете ли вы помочь мне с 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']);

Ответы [ 2 ]

0 голосов
/ 22 октября 2018
$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'),                                                     

                )                
        );
0 голосов
/ 17 октября 2018

Попробуйте это:

    $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');
...