Çok kiracı uygulamasına sahibim ve SQL'i istemciye filtrelemek için Doctrine Filters kullanıyorum.WHERE deyiminde Doctrine Filter LEFT JOIN
i müvekkilimin Projeler listesini istediğinizdeYani, ben sadece otomatik böyle WHERE üzerinde SQL ekler bir "getAll" ve filtreyi yapmanız gereken :
SELECT *
FROM projects p
WHERE p.client_id = 1 #(appended by the filter)
Benim Sorun şu ki, örneğin ProjectMembers. SOL JOIN filtre 1.
SELECT *
FROM projects p
LEFT JOIN project_members pm ON pm.project_id = p.id
AND p.client_id = 1 #(appended by the filter)
Bu bile onlar istemciden değildir, tüm ProjectMembers dönecektir çünkü filtreyi yararsız hale değil NEREDE hükmü, SQL katacak benim addFilterConstrait
public function addFilterConstraint(ClassMetaData $targetEntity, $targetTableAlias)
{
$class = $targetEntity->getName();
if (array_key_exists($class, $this->disabled) && $this->disabled[$class] === true) {
return '';
} elseif (array_key_exists($targetEntity->rootEntityName, $this->disabled) && $this->disabled[$targetEntity->rootEntityName] === true) {
return '';
}
$config = $this->getFilterConfig($targetEntity->getReflectionClass());
if (!isset($config['clientFilter']) || !$config['clientFilter']) {
return '';
}
return $targetTableAlias. '.' . $config['columnName'] . ' = ' . $this->getParameter('client'); // getParameter applies quoting automatically
}
ben bu çözebilir nasıl bir fikir yerine JOIN SOL ait WHERE için filtre ekleyerek?
Burada bir şey eklemiyor. İkinci sorgunuz geçerli DQL değil. Niçin? SELECT * projelerinden p ... LEFT JOIN projeleri p? Birleştirme işlemini doğru şekilde yaptığınızdan emin misiniz? Normalde DQL formatı, SELECT * SELECT * PROJELERDEN LEFT JOIN p.projectMembers pm ... 'olacaktır. Bu DQL nerede ve nasıl yapılır? Bu sorgu profilerden geliyor mu? – sjagr
DQL doğru, anlamak için daha kolay olması için SQL gönderdim. – costa
Doğru muydun, ben sadece SOL JOIN'i düzenledim – costa