, * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ namespace Chill\EventBundle\Repository; use Doctrine\ORM\EntityRepository; /** * Class ParticipationRepository * * @package Chill\EventBundle\Repository * @author Mathieu Jaumotte jaum_mathieu@collectifs.net */ class ParticipationRepository extends EntityRepository { /** * Count number of participations per person * * @param $person_id * @return mixed * @throws \Doctrine\ORM\NonUniqueResultException */ public function countByPerson($person_id) { return $this->createQueryBuilder('p') ->select('COUNT (p.id)') ->where('p.id = :person_id') ->setParameter(':person_id', $person_id) ->getQuery() ->getSingleScalarResult() ; } /** * Return paginated participations for a person and in reachables circles * * @param $person_id * @param $reachablesCircles * @param $first * @param $max * @return mixed */ public function findByPersonInCircle($person_id, $reachablesCircles, $first, $max) { return $this->createQueryBuilder('p') ->join('p.event', 'e') ->where('p.person = :person_id') ->andWhere('e.circle IN (:reachable_circles)') ->orderBy('e.date', 'ASC') ->setParameters(array( ':person_id' => $person_id, ':reachable_circles' => $reachablesCircles )) ->setFirstResult($first) ->setMaxResults($max) ->getQuery() ->getResult() ; } }