当在下面运行DQL时,从doctrine 2中选择仅识别器列时,我需要一些帮助
SELECT p.type FROM AppBundle\Entity\Product p
Run Code Online (Sandbox Code Playgroud)
type 是实体中的鉴别列 AppBundle\Entity\Product
@ORM\DiscriminatorColumn(name="type", type="smallint")`
@ORM\DiscriminatorMap({
"0" = "AppBundle\Entity\Product",
"1" = "AppBundle\Entity\Product\SingleIssue",
"2" = "AppBundle\Entity\Product\CountBasedIssue",
"3" = "AppBundle\Entity\Product\TimeBasedIssue"
})
Run Code Online (Sandbox Code Playgroud)
我知道这type不是实体中的不动产,但无论如何我还能这样做吗?
提前致谢!
阅读Doctrine代码2天后,我决定覆盖SqlWalker并通过下面的片段创建新的Hydrator
<?php
namespace ...;
use Doctrine\ORM\Query\SqlWalker;
class CustomSqlWalker extends SqlWalker
{
const FORCE_GET_DISCRIMINATOR_COLUMN = 'forceGetDiscriminatorColumn';
const DISCRIMINATOR_CLASS_MAP = 'discriminatorClassMap';
/**
* {@inheritdoc}
*/
public function walkSelectClause($selectClause)
{
$sql = parent::walkSelectClause($selectClause);
$forceGetDiscriminatorColumn = $this->getQuery()->getHint(self::FORCE_GET_DISCRIMINATOR_COLUMN);
if (empty($forceGetDiscriminatorColumn)) {
return $sql;
}
foreach ($this->getQueryComponents() as $key => $queryComponent) {
if (!in_array($key, …Run Code Online (Sandbox Code Playgroud)