Doctrine中的getScalarResult和getArrayResult有什么区别
What's the difference between getScalarResult and getArrayResult in Doctrine
getScalarResult() 和 getArrayResult() 的使用有什么区别
当 运行 在 Doctrine 中使用 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()
和
$query->getQuery()->getArrayResult()
由于这在 Doctrine 上没有很好的记录,我想了解概念上的差异。
从表面上看,getArrayResult()
和 getScalarResult()
都会 return 在您的查询中得到相似或相同的结果。基本上它们所改变的只是结果将如何水合:
- ArrayHydrator -- 生成嵌套数组“图形”,通常(并非总是)可与相应的对象图形互换以进行只读访问。
- ScalarHydrator -- Hydrator 生成标量数据的平面矩形结果。
他们对应的测试文件显示了他们产生什么样的输出,但可能还是有点不清楚。
简单来说,ScalarHydrator 将 return 仅包含标量值的字段值映射列表。 ArrayHydrator 可以 return 多个数组,关联数组列表(键值映射,类似于 ScalarHydrator),但它也可以包含对象,列表可以以某种方式索引并可以嵌套。
在某些情况下,尤其是对于简单的查询,两个水化器可能 return 得到相同的结果。在那种情况下,ScalarHydrator 的开销可能会更少,但它是否真的会影响性能我无法确定。
getScalarResult() 和 getArrayResult() 的使用有什么区别 当 运行 在 Doctrine 中使用 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()
和
$query->getQuery()->getArrayResult()
由于这在 Doctrine 上没有很好的记录,我想了解概念上的差异。
从表面上看,getArrayResult()
和 getScalarResult()
都会 return 在您的查询中得到相似或相同的结果。基本上它们所改变的只是结果将如何水合:
- ArrayHydrator -- 生成嵌套数组“图形”,通常(并非总是)可与相应的对象图形互换以进行只读访问。
- ScalarHydrator -- Hydrator 生成标量数据的平面矩形结果。
他们对应的测试文件显示了他们产生什么样的输出,但可能还是有点不清楚。
简单来说,ScalarHydrator 将 return 仅包含标量值的字段值映射列表。 ArrayHydrator 可以 return 多个数组,关联数组列表(键值映射,类似于 ScalarHydrator),但它也可以包含对象,列表可以以某种方式索引并可以嵌套。
在某些情况下,尤其是对于简单的查询,两个水化器可能 return 得到相同的结果。在那种情况下,ScalarHydrator 的开销可能会更少,但它是否真的会影响性能我无法确定。