<?php
namespace App\Doctrine\Filter;
use App\Annotation\SatisfactionSurveyAware;
use Doctrine\Common\Annotations\Reader;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Query\Filter\SQLFilter;
use InvalidArgumentException;
class SatisfactionSurveyFilter extends SQLFilter
{
private Reader $reader;
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias): string
{
if (empty($this->reader)) {
return '';
}
$satisfactionSurveyAware = $this->reader->getClassAnnotation(
$targetEntity->getReflectionClass(),
SatisfactionSurveyAware::class
);
if (!$satisfactionSurveyAware) {
return '';
}
$fieldName = $satisfactionSurveyAware->satisfactionSurveyFieldName;
try {
$survey = $this->getParameter('survey');
} catch (InvalidArgumentException $e) {
return '';
}
if (empty($fieldName) || empty($survey)) {
return '';
}
return sprintf('%s.%s = %s', $targetTableAlias, $fieldName, $survey);
}
public function setAnnotationReader(Reader $reader): void
{
$this->reader = $reader;
}
}