【问题标题】:Symfony4 / Doctrine, how select 'distinct' objects ? getResult() return an array of string, not an array of objectSymfony4 / Doctrine,如何选择“不同”的对象? getResult() 返回字符串数组,而不是对象数组
【发布时间】: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 完成了这项工作!我发现这是一种奇怪的方法,但它有效^^我有一个对象列表,没有任何具有相同名称的重复对象

标签: symfony doctrine symfony4


【解决方案1】:

试试group by myentity.name 而不是distinct

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

这应该可以按预期完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2021-12-02
    相关资源
    最近更新 更多