教义:以键作为关联实体值的结果
Posted
技术标签:
【中文标题】教义:以键作为关联实体值的结果【英文标题】:Doctrine: results with keys as association entity value 【发布时间】:2021-05-15 08:46:27 【问题描述】:我的项目中有两个实体:
class Effect
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(name="id", type="integer")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", unique=true)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\EffectGroup", inversedBy="effects")
* @ORM\JoinColumn(name="group_id", referencedColumnName="id")
*/
private $effectGroup;
class EffectGroup
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(name="id", type="integer")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", unique=true)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Effect", mappedBy="effectGroup")
*/
private $effects;
我需要查询数据库得到以下结果:
array [
'effectGroupName 1' => array [
object (App\Entity\Effect)
id: 1,
name: 'effectName 1'
...
,
object (App\Entity\Effect)
id: 2,
name: 'effectName 2'
...
,
]
'effectGroupName 2' => array [
object (App\Entity\Effect)
id: 3,
name: 'effectName 3'
...
,
object (App\Entity\Effect)
id: 4,
name: 'effectName 4'
...
,
]
]
其中effectGroupName 1
和effectGroupName 2
是来自EffectGroup 实体的名称。
我需要一个查询,以便我可以在 Effect id 之后过滤结果。
ORM / DQL 查询应该是什么样的?
有没有可能达到这样的结果?
【问题讨论】:
【参考方案1】:它不会是规范查询,因为您的结果不是。您将进行一些后处理(因为默认情况下教义返回 一个 行集)。
存储库函数应该看起来像这样(在 EffectRepository 中)
public function getGrouped(): array
$result = $this->createQueryBuilder('e')
->innerJoin('e.effectGroup', 'g')
->select('e as effect')
->addSelect('g.name as groupname')
->getQuery()
->getResult();
$return = [];
foreach ($result as $row)
$return[$row['groupname']][] = $row['effect'];
return $return;
【讨论】:
我很确定您在这里不需要isset
,请参阅:3v4l.org/EfGi0
@goulashsoup 嗯,你是对的。更新了答案。谢谢! ;o)以上是关于教义:以键作为关联实体值的结果的主要内容,如果未能解决你的问题,请参考以下文章