Uso i filtri di doctrine e di recente ho notato che i filtri non vengono applicati alle istruzioni di eliminazione. Ho cercato di analizzare la documentazione e google, ma il mistero rimane irrisolto.Doctrine2 applica i filtri per eliminare le istruzioni
Per esempio io ho il filtro che si collega all'utente di società in modo che ogni query di selezione come:
$userRepo->find(12);
e viene modificato da
SELEZIONA .... da t0 utente in cui t0.id = 12
in
SELEZIONA .... da t0 utente in cui t0.id = 12 E (t0.company_id = '6')
fresco, che è quello che mi serve.
Ciò che mi dà fastidio è che le istruzioni di cancellazione sembrano non essere toccate. Qualcuno sa se è l'architettura predefinita di dottrina o la mia configurazione è sbagliata?
Il filtro
use Doctrine\ORM\Mapping\ClassMetaData;
use Doctrine\ORM\Query\Filter\SQLFilter;
use Doctrine\Common\Annotations\Reader;
class CompanyAware extends SQLFilter
{
/**
* @var Reader
*/
protected $reader;
/**
* @param ClassMetaData $targetEntity
* @param string $targetTableAlias
*
* @return string
*/
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
$query = '';
$ann = 'Mrok\\PortalBundle\\Annotation\\CompanyAware';
$isAware = $this->reader->getClassAnnotation($targetEntity->getReflectionClass(), $ann);
if ($isAware) {
$id = $this->getParameter('id');
$query = sprintf('%s.company_id = %s', $targetTableAlias, $id);
}
return $query;
}
public function setAnnotationReader(Reader $reader)
{
$this->reader = $reader;
}
}
Possiamo vedere il filtro di sql? – Federkun