Segelparade / www / symfonyproject / src / Repository / ImageRepository.php
ImageRepository.php
Raw
<?php

namespace App\Repository;

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

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

    //    /**
    //     * @return Image[] Returns an array of Image objects
    //     */
    //    public function findByExampleField($value): array
    //    {
    //        return $this->createQueryBuilder('i')
    //            ->andWhere('i.exampleField = :val')
    //            ->setParameter('val', $value)
    //            ->orderBy('i.id', 'ASC')
    //            ->setMaxResults(10)
    //            ->getQuery()
    //            ->getResult()
    //        ;
    //    }

    // find last object in DB
    public function findLastId(): int
    {
        $result = $this->createQueryBuilder('e')
            ->select('e.id')
            ->orderBy('e.id', 'DESC') // Annahme, dass "id" das Primärschlüssel-Feld ist. Du musst es entsprechend anpassen.
            ->setMaxResults(1)
            ->getQuery()
            ->getSingleScalarResult();

        return $result;
    }

    public function findAllByCategory($category, $limit = null,$skip_deleted = true )
    {

        $queryBuilder = $this->createQueryBuilder('i')
            ->innerJoin("i.processing", "p")
            ->andWhere('p.type = :val')
            ->setParameter('val', $category);

        if ($skip_deleted) {
            // If $skip_deleted is true, check for records where 'deleted' is NULL
            $queryBuilder->andWhere('i.deleted IS NULL');
        } else {
            // If $skip_deleted is false, check for records where 'deleted' is NOT NULL
            $queryBuilder->andWhere('i.deleted IS NOT NULL');
        }
        // output query
      //  echo $queryBuilder->getQuery()->getSQL();

        if ($limit !== null) {
            $queryBuilder->setMaxResults($limit);
        }
    
        return $queryBuilder->getQuery()->getResult();
    }
    
    public function fintAllbyAccepted($limit=null) {
        $queryBuilder = $this->createQueryBuilder('i')
            ->where('i.accepted IS NOT NULL');
    
        if ($limit !== null) {
            $queryBuilder->setMaxResults($limit);
        }
    
        return $queryBuilder->getQuery()->getResult();
    }

    public function findAllByTags($tags): array
    {
        $qb = $this->createQueryBuilder('i')
            ->innerJoin('i.tag', 't');

        // Create an empty expression
        $whereClause = $qb->expr()->orX();

        // adding the Clause
        foreach ($tags as $key => $tag) {
            $parameterName = 'tag_' . $key;
            $whereClause->add($qb->expr()->eq('t.name', ':' . $parameterName));
            $qb->setParameter($parameterName, $tag);
        }

        // adding it to the request
        $qb->andWhere($whereClause);

        // executing the request
        return $qb->getQuery()->getResult();
    }


    public function findById($id): ?Image
    {
        return $this->createQueryBuilder('i')
            ->leftJoin('i.tag', 't')
            ->andWhere('i.id = :val')
            ->setParameter('val', $id)
            ->getQuery()
            ->getOneOrNullResult();
    }


    //    public function findOneBySomeField($value): ?Image
    //    {
    //        return $this->createQueryBuilder('i')
    //            ->andWhere('i.exampleField = :val')
    //            ->setParameter('val', $value)
    //            ->getQuery()
    //            ->getOneOrNullResult()
    //        ;
    //    }

    public function countAll(){
        return  $this->createQueryBuilder('i')
            ->select('COUNT(i.id)')
            ->getQuery()
            ->getSingleScalarResult();
    }

    public function countAllByCategory($category, $skip_deleted = true): int
    {
        $queryBuilder = $this->createQueryBuilder('i')
            ->select('COUNT(i.id)')
            ->innerJoin('i.processing', 'p')
            ->andWhere('p.type = :val')
            ->setParameter('val', $category);

        if ($skip_deleted) {
            // If $skip_deleted is true, check for records where 'deleted' is NULL
            $queryBuilder->andWhere('i.deleted IS NULL');
        } else {
            // If $skip_deleted is false, check for records where 'deleted' is NOT NULL
            $queryBuilder->andWhere('i.deleted IS NOT NULL');
        }

        return (int) $queryBuilder->getQuery()->getSingleScalarResult();
    }
}