栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

忽略了Doctrine生成的SQL的鉴别器部分

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

忽略了Doctrine生成的SQL的鉴别器部分

这是我能想到的解决方案。想法是扩展一些学说类以添加所需的功能。保持模型不变。

创建扩展SqlWalker的新类(当然是更新名称空间)

<?phpnamespace Sad;use DoctrineORMMappingClassmetadata;use DoctrineORMQuerySqlWalker;class CustomSqlWalker extends SqlWalker{  const IGNORE_DISCRIMINATION = 'ignoreDiscrimination';    public function walkWhereClause($whereClause)  {    // Get list of aliases in which discrimination should be ignored    $ignoreDescription = $this->getQuery()->getHint(self::IGNORE_DISCRIMINATION);    if ($ignoreDescription !== false) {      // For each aliases...      foreach ($this->getQueryComponents() as $k => $component) {        // ...check if alias is in ignore list        if (in_array($k, $ignoreDescription)) {                    $metaObj = $component['metadata'];          // Update inheritance type to disable discrimination where          if ($metaObj->isInheritanceTypeSingleTable()) { $metaObj->setInheritanceType(Classmetadata::INHERITANCE_TYPE_NONE);          }        }      }    }    return parent::walkWhereClause($whereClause);  }}

然后进行查询,您可以执行以下操作:

echo $entityManager->createQuery("SELECT p FROM SadSchemaAbstractPage as p")->getSQL();// Output: ELECT p0_.id AS id_0, p0_.name AS name_1, p0_.type AS type_2 FROM page p0_ WHERe p0_.type IN ('page', 'link')$query = $entityManager->createQuery("SELECt p FROM SadSchemaAbstractPage as p");// Make sure query uses custom walker$query->setHint(DoctrineORMQuery::HINT_CUSTOM_OUTPUT_WALKER, 'SadCustomSqlWalker');// Specify which aliases should ignore discrimination$query->setHint(SadCustomSqlWalker::IGNORE_DISCRIMINATION, array('p'));echo $query->getSQL();// Output: ELECT p0_.id AS id_0, p0_.name AS name_1, p0_.type AS type_2 FROM page p0_


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号