Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/MemberBundle/Repository/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/MemberBundle/Repository/HRForumRepository.php

<?php

namespace App\MemberBundle\Repository;

use App\MemberBundle\Entity\HRForum;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @extends ServiceEntityRepository<HRForum>
 *
 * @method HRForum|null find($id, $lockMode = null, $lockVersion = null)
 * @method HRForum|null findOneBy(array $criteria, array $orderBy = null)
 * @method HRForum[]    findAll()
 * @method HRForum[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class HRForumRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, HRForum::class);
    }

    /**
     * Get the list of IDs
     * @return array
     */
    public function findAllIds()
    {
        return $this->createQueryBuilder('h')
            ->select('h.hrForumID')
            ->getQuery()->getArrayResult()
        ;
    }

    /**
     * Find HR Forum members by email
     *
     * @param string $email
     * @return HRForum|null
     */
    public function findByEmail(string $email): ?HRForum
    {
        return $this->createQueryBuilder('h')
            ->andWhere('h.email = :email')
            ->setParameter('email', $email)
            ->getQuery()
            ->getOneOrNullResult();
    }

    /**
     * Find HR Forum members by company
     *
     * @param string $company
     * @return HRForum[]
     */
    public function findByCompany(string $company): array
    {
        return $this->createQueryBuilder('h')
            ->andWhere('h.company = :company')
            ->setParameter('company', $company)
            ->orderBy('h.firstName', 'ASC')
            ->getQuery()
            ->getResult();
    }

    /**
     * Find subscribed HR Forum members
     *
     * @return HRForum[]
     */
    public function findSubscribed(): array
    {
        return $this->createQueryBuilder('h')
            ->andWhere('h.subscribed = :subscribed')
            ->setParameter('subscribed', true)
            ->orderBy('h.firstName', 'ASC')
            ->getQuery()
            ->getResult();
    }

    /**
     * Find HR Forum members by firm ID
     *
     * @param int $firmID
     * @return HRForum[]
     */
    public function findByFirmID(int $firmID): array
    {
        return $this->createQueryBuilder('h')
            ->andWhere('h.firmID = :firmID')
            ->setParameter('firmID', $firmID)
            ->orderBy('h.firstName', 'ASC')
            ->getQuery()
            ->getResult();
    }

    /**
     * Search HR Forum members by name or email
     *
     * @param string $searchTerm
     * @return HRForum[]
     */
    public function searchByNameOrEmail(string $searchTerm): array
    {
        return $this->createQueryBuilder('h')
            ->andWhere('h.firstName LIKE :search OR h.surname LIKE :search OR h.email LIKE :search')
            ->setParameter('search', '%' . $searchTerm . '%')
            ->orderBy('h.firstName', 'ASC')
            ->getQuery()
            ->getResult();
    }

    /**
     * Count total HR Forum members
     *
     * @return int
     */
    public function countTotal(): int
    {
        return $this->createQueryBuilder('h')
            ->select('COUNT(h.hrForumID)')
            ->getQuery()
            ->getSingleScalarResult();
    }

    /**
     * Count subscribed HR Forum members
     *
     * @return int
     */
    public function countSubscribed(): int
    {
        return $this->createQueryBuilder('h')
            ->select('COUNT(h.hrForumID)')
            ->andWhere('h.subscribed = :subscribed')
            ->setParameter('subscribed', true)
            ->getQuery()
            ->getSingleScalarResult();
    }
}