小编Chi*_*Lee的帖子

如何在学说2中选择鉴别列

当在下面运行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

覆盖SqlWalker

<?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)

php dql symfony doctrine-orm discriminator

6
推荐指数
2
解决办法
6104
查看次数

标签 统计

discriminator ×1

doctrine-orm ×1

dql ×1

php ×1

symfony ×1