Tak więc mam 3 elementy w ramach jednej tabeli. Muszę mieć możliwość wyszukiwania 2 z 3 elementów w jednym oświadczeniu select, ale nie jestem pewien, jak to zrobić.Jak napisać instrukcję select DQL, aby wyszukać niektóre, ale nie wszystkie elementy w tabeli pojedynczej tabeli dziedziczenia
11
A
Odpowiedz
17
Użyj operatora INSTANCE OF
w zapytaniu DQL następująco (gdzie User
to klasa bazowa):
$em->createQuery('
SELECT u
FROM Entity\User u
WHERE (u INSTANCE OF Entity\Manager OR u INSTANCE OF Entity\Customer)
');
Doktryna przekłada się to w zapytaniu SQL w stanie WHERE user.type = '...'
.
Więcej informacji na temat składni zapytania dql można znaleźć pod numerem here.
1
Jak commented przez flu, jeśli chcesz odzyskać niektóre podmioty z różnych przypadkach z QueryBuilder zamiast zapytania DQL, można użyć tablicę jako parametr:
$qb = $this->createQueryBuilder('u');
->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
->andWhere('u INSTANCE OF :classes')
->setParameter('classes', ['Entity\Manager', 'Entity\Customer'])
;
4
odpowiedź dla wielu przypadkach faktycznie robi nie działa. Trzeba by zrobić coś takiego, aby sprawdzić wiele instancji.
$classes = ['Entity\Manager', 'Entity\Customer'];
$qb = $this->createQueryBuilder('u');
->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
->andWhere("u INSTANCE OF ('" . implode("','", $classes) . "')");
Powiązane problemy
- 1. jak usunąć wszystkie elementy w tabeli Lua?
- 2. Doctrine2: arbitralny dołączyć i pojedynczej tabeli dziedziczenie
- 3. has_many z hierarchii wielopoziomowego i pojedynczej tabeli dziedziczenia
- 4. Zaznaczając wszystkie pola tabeli A, ale wybierz pola tabeli B
- 5. Pęknięte szyny Trasy po wdrożeniu pojedynczej tabeli dziedziczenia
- 6. Jak napisać literał tabeli w Oracle?
- 7. Upuść wszystkie wiązania w tabeli
- 8. Wyświetlanie pojedynczej pozycji w tabeli MySQL
- 9. Dziedziczenie pojedynczego stołu lub dziedziczenia tabeli klas?
- 10. Skutecznie duplikuj niektóre wiersze w tabeli PostgreSQL
- 11. Porównaj dwie listy, aby wyszukać typowe elementy:
- 12. Jak zmienić nazwę pojedynczej kolumny w tabeli przy wyborze?
- 13. jak mogę napisać instrukcję IF w mysql
- 14. Jak uzyskać Oracle utworzyć instrukcję tabeli w SQL * Plus
- 15. tmux zsynchronizuj niektóre ale nie wszystkie panele
- 16. Zagadnienie implementacji tabeli na hierarchię i dziedziczenia
- 17. Modyfikowanie wtyczki jQuery tabeli tabeli
- 18. Łączenie tabeli kolumna w pojedynczej komórce
- 19. MySQL zagnieżdżone SELECT w aktualizacji samej tabeli
- 20. Wiele do wielu relacji do pojedynczej tabeli
- 21. Zastosowanie procedury przechowywanej, aby wstawić niektóre dane do tabeli
- 22. Wybierz z tabeli A, które nie istnieje w tabeli B
- 23. Wybór SQL z wieloma odniesieniami do pojedynczej tabeli
- 24. Jak napisać wielowierszową instrukcję Jinja
- 25. Jak napisać DataFrame do tabeli postgres?
- 26. Tworzenie tabeli przy użyciu jawnie utworzyć instrukcję tabeli i wybrać w
- 27. Jak powiedzieć RadioButtonList, aby NIE generować tabeli
- 28. Wykonaj dynamiczną instrukcję SQL przechowywaną w kolumnie tabeli
- 29. Aby uzyskać szczegóły tabeli
- 30. Zapytanie sql select w tej samej tabeli
Można sprawdzić wiele wystąpień za pomocą polecenia '' WHERE (u INSTANCE OF (Entity \ Manager, Entity \ Customer)) ''. Jeśli masz '' QueryBuilder'' możesz użyć '' $ qb-> andWhere ('u INSTANCE OF: classes') -> setParameter ('classes', array ('Entity \ Manager', 'Entity \ Customer')); ''. – flu
Pamiętaj, że podczas pracy z mapą dyskryminatora możesz potrzebować użyć wartości dyskryminatora, możesz to zrobić w swoim repozytorium w ten sposób: '$ this-> getClassMetadata() -> discriminatorValue' –