当前位置: 首页 > 知识库问答 >
问题:

仅检索选定列的索引

轩辕风华
2023-03-14

我目前正在重构一个用Symfony 3编写的应用程序,并且严重依赖ORM,我一直在尝试获取一个包含所选列索引的对象/数组。

现在我对PHP PDO相当熟悉,我记得查询结果的基本获取如下所示

$sth->fetchAll();

(根据我的查询)它会给我一个类似于下面的数组

  [0] => Array
    (
        [name] => pear
        [0] => pear
        [colour] => green
        [1] => green
    )

[1] => Array
    (
        [name] => watermelon
        [0] => watermelon
        [colour] => pink
        [1] => pink
    )

在理论方面,我尝试使用几个具有水合参数的内置函数

$query->getResult(); 

运气不好,我最后得到了这样的东西

Array
(
  [0] => Array
    (
        [name] => pear
        [colour] => green
    )

 [1] => Array
    (
        [name] => Watermelon
        [colour] => Pink
    )
)

有人能帮我或者给我指出正确的方向吗?如何正确地解决这个问题?

----更新了问题,包含了我目前使用的完整方法----

public function getDepartmentCount()
{
    $qb = $this->createQueryBuilder('fruit')
        ->leftJoin('fruit.color','color')
    $query=$qb->getQuery();
    return $query->getArrayResult(); //Method that possibly needs to be changed
}

共有1个答案

吴靖
2023-03-14

我已经能够解决这个问题后,我自己创建了一个自定义水合器。

我将为可能面临类似问题的任何人保留解决方案。

下面是自定义水合器的类

namespace AppBundle\Doctrine;
use Doctrine\ORM\Internal\Hydration\AbstractHydrator;
use PDO;

class CustomHydrator extends AbstractHydrator
{
    /**
    * Hydrates all rows from the current statement instance at once.
    *
    * @return array
    */
    protected function hydrateAllData()
    {
        // TODO: Implement hydrateAllData() method.
        return $this->_stmt->fetchAll(PDO::FETCH_NUM);
    }
}

在我的配置文件的orm部分下添加了这个命令,告诉Symfony在哪里可以找到定制的水合器及其名称

hydrators:
          GridDataHydrator: AppBundle\Doctrine\CustomHydrator

并最终使用此方法执行查询

$query->getResult('GridDataHydrator');
 类似资料:
  • 问题内容: 使用JDBC时,我经常遇到类似 我问自己(也包括代码作者)为什么不使用标签来检索列值: 我听到的最好的解释是关于性能的。但是实际上,这使处理速度非常快吗?我不相信,尽管我从未进行过测量。我认为,即使按标签检索会稍慢一些,但它仍具有更好的可读性和灵活性。 因此,有人可以给我很好的解释,避免使用列索引而不是列标签来检索列值吗?两种方法的优缺点(也许涉及某些DBMS)是什么? 问题答案: 默

  • 问题内容: 我正在尝试仅使用来自多索引DataFrame的一个索引来创建新的DataFrame。 理想情况下,我想要这样的事情: 和: 本质上,我想删除除level之外的多索引的所有其他索引。是否有捷径可寻? 问题答案: 一种方法是简单地重新绑定到所需的MultiIndex级别。您可以通过指定要保留的标签名称来做到这一点: 或使用级别的整数值: MultiIndex的所有其他级别将在此处消失。

  • 是否有一种方法可以使我在从索引中检索时,只获得文档的_source中的数据&而不是任何其他元数据,如_index、_type、_id和_score?

  • 有什么快速的方法可以过滤列表并获得值的索引吗? 我想拿到我找到的东西的索引?

  • 我很难选择一个NumPy矩阵的每行的特定列。 假设我有以下矩阵,我称之为: 我还有一个每行列索引的,我称之为: 我需要获得值: 我还可以生成一个与形状相同的矩阵,而不是带有索引的,其中每一列都是一个/范围为0-1的值,指示这是否是必需的列。 我知道这可以通过迭代数组并选择我需要的列值来完成。然而,这将经常在大的数据数组上执行,这就是为什么它必须尽可能快地运行。 因此,我想知道是否有更好的解决办法?

  • 问题内容: 我正在负载下测试数据库设计,我只需要检索固定数量的行(5000) 我可以指定一个LIMIT来实现这一点,但是查询似乎会构建所有匹配行的结果集,然后仅返回该限制中指定的行数。那是怎么实现的? MySQL是否有读取一行,读取另一行并在检索到第5000个匹配行时基本停止的功能? 问题答案: MySQL很聪明,如果您在查询中指定a ,并且有可能在不先生成整个结果集的情况下生成该结果,则它将不会