2015-01-09 19 views
5

Ç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ğinizde

Yani, 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?

+0

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

+0

DQL doğru, anlamak için daha kolay olması için SQL gönderdim. – costa

+0

Doğru muydun, ben sadece SOL JOIN'i düzenledim – costa

cevap

-2

bu deneyin:

SELECT * FROM table1, table2 WHERE table1.id = table2.id 

Bu sorununuzu çözebilir.

İlgili konular