Eluinhost/TeamspeakAuth

View on GitHub
src/PublicUHC/Bundle/TeamspeakAuthBundle/Entity/TeamspeakAccountRepository.php

Summary

Maintainability
B
6 hrs
Test Coverage
<?php

namespace PublicUHC\Bundle\TeamspeakAuthBundle\Entity;

use Doctrine\ORM\EntityRepository;
use PublicUHC\Bundle\TeamspeakAuthBundle\Model\AccountSearchParameters;

/**
 * TeamspeakAccountRepository
 */
class TeamspeakAccountRepository extends EntityRepository
{

    public function findAllByParameters(AccountSearchParameters $parameters)
    {
        $em = $this->getEntityManager();
        $qb = $em->createQueryBuilder();
        $ex = $qb->expr();

        $qb->select('tsAccount')
            ->from('PublicUHCTeamspeakAuthBundle:TeamspeakAccount', 'tsAccount')
            ->leftJoin('tsAccount.authentications', 'authentication')
            ->leftJoin('authentication.minecraftAccount', 'mcAccount');

        if(count($parameters->getUuids()) > 0) {
            $qb->where($ex->in('tsAccount.uuid', explode(',', $parameters->getUuids())));
        } else {
            $qb->setMaxResults($parameters->getLimit());
            $qb->setFirstResult($parameters->getOffset());
        }

        if($parameters->isVerified()) {
            $qb->groupBy('tsAccount')->having($ex->gt($ex->count('authentication'), 0));
        }

        return $qb->getQuery()->getResult();
    }
}