Symfony4 / Doctrine,如何选择“不同”的对象? getResult() 返回字符串数组,而不是对象数组

Posted

技术标签:

【中文标题】Symfony4 / Doctrine,如何选择“不同”的对象? getResult() 返回字符串数组,而不是对象数组【英文标题】:Symfony4 / Doctrine, how select 'distinct' objects ? getResult() return an array of string, not an array of object 【发布时间】:2018-11-06 09:53:52 【问题描述】:

从 Symfony4/Doctrine 中,我需要使用实体的存储库自定义方法选择所有“不同”对象,下面是一个简单的示例:

实体的最小示例表:

一个简单的$em->getRepository(MyEntity::class)->findAll(); 以对象结构返回我的表的所有数据。

我正在寻找一种方法来执行与列名不同的相同查询。在我的示例中,此查询必须返回对象 1、3 和 5。

我尝试了这个实体的存储库自定义方法:

public function getDistinct()
    $query = $this->createQueryBuilder('myentity');
    $res = $query
        ->select("myentity.name")
        ->distinct(true)
        ->getQuery()
        ->getResult();
    return $res;

但是$res var 包含一个字符串结果数组,而不是一个对象数组(我想要一个实体对象数组)。

我该怎么做?

【问题讨论】:

不确定这是否是唯一的错误,但您必须至少选择 id 来补充实体 hmmm 我如何选择 id 和 name,但只有 name 不同:? group by myentity.name 而不是 distinct 呢? groupBy 完成了这项工作!我发现这是一种奇怪的方法,但它有效^^我有一个对象列表,没有任何具有相同名称的重复对象 【参考方案1】:

试试group by myentity.name 而不是distinct

$res = $query
   ->select("myentity")
   ->groupBy("myentity.name")
   ->getQuery()
   ->getResult();

这应该可以按预期完成。

【讨论】:

以上是关于Symfony4 / Doctrine,如何选择“不同”的对象? getResult() 返回字符串数组,而不是对象数组的主要内容,如果未能解决你的问题,请参考以下文章

Symfony4 - Doctrine Cross Database加入配置

Symfony4 数据库连接

如何使用教义/symfony4 从数据库中获取(连接)两条记录

如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射

Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类

在控制器上捕获 Doctrine 异常