entityManager = $entityManager; } public function selectNotInId(array $ids) { $qb = $this->entityManager->createQueryBuilder(); return $qb->select('vp') ->from(VariableProject::class, 'vp') ->where($qb->expr()->notIn('vp.id', $ids)) ->andWhere('vp.deletedAt is null') ->getQuery() ->getResult(); } public function findByVariableInTemplateIds(array $templateIds) { $qb = $this->entityManager->createQueryBuilder(); return $qb->select('DISTINCT vp.id as variableProjectId', 'vp.name as variableProjectName', 'v.id as variableId', 'v.name as variableName', 'v.forElement as forElement', 'vp.fieldType as fieldType') ->from(VariableProject::class, 'vp') ->innerJoin('vp.variables', 'v') ->innerJoin('v.twig', 'twig') ->innerJoin('twig.templates', 't') ->where($qb->expr()->in('t.id', $templateIds)) ->andWhere('vp.deletedAt is null') ->andWhere('v.deletedAt is null') ->getQuery() ->getResult(); } public function findByTemplateMediaVariableInTemplateIds(array $templateIds) { $qb = $this->entityManager->createQueryBuilder(); return $qb->select('DISTINCT vp.id as variableProjectId', 'vp.name as variableProjectName', 'm.id as templateMediaId', 'm.name as templateMediaName', 'm.forElement as forElement', "'media' as fieldType") ->from(VariableProject::class, 'vp') ->innerJoin('vp.medias', 'm') ->innerJoin('m.template', 't') ->where($qb->expr()->in('t.id', $templateIds)) ->andWhere('vp.deletedAt is null') ->andWhere('m.deletedAt is null') ->getQuery() ->getResult(); } public function findByInputInTemplateIds(array $templateIds) { $qb = $this->entityManager->createQueryBuilder(); return $qb->select('DISTINCT vp.id as variableProjectId', 'vp.name as variableProjectName', 'v.id as variableId', 'v.name as variableName', 'i.id as inputId', 'i.name as InputName', 'vp.fieldType as fieldType', 'vpp.id as variableProjectParentId') ->from(VariableProject::class, 'vp') ->innerJoin('vp.inputs', 'i') ->innerJoin('i.variable', 'v') ->innerJoin('v.variableProject', 'vpp') ->innerJoin('v.twig', 'twig') ->innerJoin('twig.templates', 't') ->where($qb->expr()->in('t.id', $templateIds)) ->andWhere('vp.deletedAt is null') ->andWhere('i.deletedAt is null') ->getQuery() ->getResult(); } public function findById(int $id) { return $this->entityManager->createQueryBuilder() ->select('vp') ->from(VariableProject::class, 'vp') ->where('vp.deletedAt is null') ->andWhere('vp.id = :id') ->setParameter('id', $id) ->getQuery() ->getOneOrNullResult(); } public function listByDataTableFilters(string $orderDirection, string $orderColumnName, int $start, int $length, ?string $searchValue, array $customFilters, bool $strictMode = false, bool $searchOnFieldValue = false, bool $searchOnArchived = false): array { $qb = $this->entityManager->createQueryBuilder(); $qb->select('vp'); $qb->distinct() ->from(VariableProject::class, 'vp'); if (null !== $searchValue) { $qb->andWhere('vp.name LIKE :search'); if (!$strictMode) { $qb->setParameter('search', "%" . $searchValue . "%"); } else { $qb->setParameter('search', $searchValue); } } foreach ($customFilters as $key => $value) { if (!empty($value)) { $qb->andWhere($qb->expr()->in($key, $value)); } } $qb->andWhere('vp.deletedAt is null'); $qb->groupBy('vp.id'); $qb->orderBy($orderColumnName, $orderDirection); $qb->setFirstResult($start) ->setMaxResults($length); $paginator = new Paginator($qb); $data = $qb->getQuery()->getResult(); return [ "data" => $data, "recordsFiltered" => count($paginator) ]; } }