doctrine Выбрать сущности только родительского класса(select Parent::class), выбрать по дискриминатору (discr) - NOT INSTANCE OF

Задача

При использовании SingleTable необходимо сделать выборку сущностей ТОЛЬКО родительского класса, исключая все наследуемые.

Решение

Можно, добавив в запрос условие NOT INSTANCE OF:

$result = $this->getEntityManager()
     ->createQueryBuilder()
     ->select('u')
     ->from(User::class, 'u')
     ->where('u NOT INSTANCE OF '.Manager::class);

В данном случае класс Manager унаследован от User, но хранится с ним в одной таблице (см. SingleTable):

/**
 * @ORM\Entity
 * @ORM\Table(name="`user`")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({
 *     "user" = "App\Entity\User",
 *     "manager" = "App\Entity\Manager",
 * })
 */
class User
{ 
    //...

Источник