2012-12-13 13 views
10

Uwaga: Jest to ograniczenie ORM reported on the project's issue trackerDoctrine2: arbitralny dołączyć i pojedynczej tabeli dziedziczenie

jestem w obliczu problemu buduje DQL zapytanie za pomocą dowolnego dołączyć składni wprowadzone w Doctrine 2.3 na klasie encji który jest korzeniem hierarchii.

Biorąc pod uwagę te zajęcia:

A - brak dziedziczenia

B1 - streszczenie, korzeniem hierarchii, kolumna dyskryminator jest nazwany 'typem'

I setup budowniczym zapytanie jak to:

$qb->select('a.id AS idA, b.id AS idB') 
    ->from('\Entity\A', 'a') 
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something'); 

Doktryna SQL generuje coś takiego:

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3') 

problemów jest to, że gdzie czyni lewo dołączyć bezużyteczne.

Czy istnieje sposób na wymuszenie umieszczenia warunek na kolumnie dyskryminatora w złączu? Przynajmniej to by sprawiło, że ...

Czy powinienem wypełnić zgłoszenie błędu?

Odpowiedz

-1

Czy próbowałeś połączenia wewnętrznego zamiast lewego łączenia? Zapytanie że trzeba prawdopodobnie mogłyby

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b 
       ON (a.something = b.something) 
WHERE b.type IN ('1', '2', '3') 

że można uzyskać zmieniając leftJoin funkcji przez przyłączyć, lub tworzenia kwerendy z metody createQuery zapytań celnych.

+0

Dobrze Chcę odzyskać wszystkie elementy A, nawet te, które nie mają żadnego B więc wewnętrzny join nie pomoże. W rzeczywistości bieżące zachowanie jest takie samo, jak w przypadku użycia sprzężenia wewnętrznego z powodu warunku where w kolumnie b.type. – Jay

-1

spróbować

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b ON (a.something = b.something) and b.type IN ('1', '2', '3') 
Powiązane problemy