entityManager->getClassMetadata(AccompanyingCourseDocument::class); $query = new FetchQuery( self::KEY, sprintf('jsonb_build_object(\'id\', %s)', $classMetadata->getIdentifierColumnNames()[0]), sprintf($classMetadata->getColumnName('date')), $classMetadata->getSchemaName() . '.' . $classMetadata->getTableName() ); $query->addWhereClause( sprintf('%s = ?', $classMetadata->getSingleAssociationJoinColumnName('course')), [$accompanyingPeriod->getId()], [Types::INTEGER] ); if (null !== $startDate) { $query->addWhereClause( sprintf('? <= %s', $classMetadata->getColumnName('date')), [$startDate], [Types::DATE_IMMUTABLE] ); } if (null !== $endDate) { $query->addWhereClause( sprintf('? >= %s', $classMetadata->getColumnName('date')), [$endDate], [Types::DATE_IMMUTABLE] ); } if (null !== $content) { $query->addWhereClause( sprintf( '(%s ilike ? OR %s ilike ?)', $classMetadata->getColumnName('title'), $classMetadata->getColumnName('description') ), ['%' . $content . '%', '%' . $content . '%'], [Types::STRING, Types::STRING] ); } return $query; } public function isAllowedForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod): bool { return $this->security->isGranted(AccompanyingCourseDocumentVoter::SEE, $accompanyingPeriod); } }