Doctrine orm 什么';getScalarResult和getArrayResult在原则上的区别是什么

Doctrine orm 什么';getScalarResult和getArrayResult在原则上的区别是什么,doctrine-orm,Doctrine Orm,使用:getScalarResult()和getArrayResult()有什么区别 在原则中使用QueryBuilder运行查询时: $query = $this->em->createQueryBuilder(); $query->select(self::SHORT_LIST) ->from(DataSetting::class, 'ds') ->andWhere('ds.'.$field.' L

使用:getScalarResult()和getArrayResult()有什么区别 在原则中使用QueryBuilder运行查询时:

$query = $this->em->createQueryBuilder();
        $query->select(self::SHORT_LIST)
            ->from(DataSetting::class, 'ds')
            ->andWhere('ds.'.$field.' LIKE :searchField')
            ->setParameter('searchField', $value . '%')
            ->setMaxResults($filters->getLength());
$query->getQuery()->getScalarResult()


由于这在理论上没有很好的记录,我想了解概念上的差异。

表面上看,
getArrayResult()
getScalarResult()
都会在查询中返回类似或相同的结果。基本上,它们所改变的是结果如何被水合:

  • --生成一个嵌套数组“图”,该图通常(并非总是)可与相应的对象图互换,以进行只读访问
  • --生成标量数据的平面矩形结果的计数器
它们相应的测试文件显示了它们产生的输出类型,但可能仍然有点不清楚

简单地说,ScalarOr将返回仅包含标量值的字段值映射列表。ArrayHydrator可以返回多个数组,一个关联数组列表(键值映射,类似于ScalarHydrator),但它也可以包含对象,列表可以以某种方式索引并嵌套


在某些情况下,特别是对于简单的查询,两个查询器可能返回相同的结果。在这种情况下,ScalarOr的开销可能较小,但我无法确定它是否真的会影响性能。

其中一个会返回数组。另一个返回一个标量。你能更具体一点吗?除了明显的差异之外,您还希望看到什么样的差异?主题之外,但请确保验证$field,否则您只是打开了对SQL注入的查询。我想了解概念上的差异。因为这种方法在条令文件中没有很好的记录
$query->getQuery()->getArrayResult()