Как включить дублирование Карт Дискриминатора, разрешить отображение по умолчанию, или полностью игнорировать отображения Дискриминатора при выполнении запроса DQL?
Настройка:
// DQL Query:
$this->createQueryBuilder('s')
->select(['s.serverId', 'p.projectName'])
->leftJoin('s.serverServices', 'ss')
->leftJoin('ss.serverServiceProjects', 'ps')
->leftJoin('ps.project', 'p')
->getQuery()
->getArrayResult()
// Mapping
/**
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="service_type_id", type="integer")
* @ORM\DiscriminatorMap({
* "1" = "AppBundle\Entity\ServerService",
* "2" = "AppBundle\Entity\ServerService",
* [...]
* "12" = "AppBundle\Entity\Service\SubService",
* "" = "AppBundle\Entity\ServerService"
* })
*/
Сгенерированная часть join :
LEFT JOIN server_services s2_ ON s0_.server_id = s2_.server_id AND s2_.service_type_id IN ('1', '12')
Это совершенно неверно.У меня есть полное отображение от 1 до 12. И "" соответствует пустой строке.Если строка не имеет известного отображения (в моем коде) ИЛИ если она пуста, она должна быть установлена в базу по умолчанию ServerService
.
Я нашел этот пост: Не указывать часть дискриминатораof Doctrine 'сгенерированный SQL
Тем не менее, он еще в 2014 году, упомянул разницу в версии и не компенсирует дубликата или по умолчанию Отображения.
РЕДАКТИРОВАТЬ: Для записи я попытался игнорировать маршрут - он не работал.
$q->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, MySqlWalker::class)
->setHint(MySqlWalker::IGNORE_DISCRIMINATION, array('ss'));
По-прежнему возвращает вышеуказанный оператор SQL Joint.Это вызывает MySqlWalker;он входит в вызов setInheritanceType()
, но не игнорирует отображение Discriminator.: /