<?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();
}
}