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 从数据库中获取(连接)两条记录
如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射
Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类