Как написать оператор выбора DQL для поиска некоторых, но не всех объектов в одной таблице наследования таблиц - PullRequest
12 голосов
/ 21 сентября 2011

Итак, у меня есть 3 объекта в одной таблице. Мне нужно иметь возможность искать 2 из 3 объектов в одном операторе выбора, но я не уверен, как это сделать.

Ответы [ 3 ]

18 голосов
/ 22 сентября 2011

Используйте оператор INSTANCE OF в вашем dql-запросе следующим образом (где User - ваш базовый класс):

$em->createQuery('
    SELECT u 
    FROM Entity\User u 
    WHERE (u INSTANCE OF Entity\Manager OR u INSTANCE OF Entity\Customer)
');

Doctrine переводит это в запросе sql в WHERE user.type = '...' условии.

См. здесь для получения дополнительной информации о синтаксисе запроса dql.

5 голосов
/ 22 июня 2016

Ответ для нескольких экземпляров фактически не работает.Вы должны сделать что-то подобное, чтобы проверить наличие нескольких экземпляров.

$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) . "')");
2 голосов
/ 01 июля 2015

Как прокомментировал от flu , если вы хотите получить некоторые объекты из разных экземпляров с помощью QueryBuilder вместо запроса DQL, вы можете использовать массив в качестве параметра:

$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'])
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...