【发布时间】:2016-02-02 18:20:05
【问题描述】:
如标题所述,
我想运行 1 个查询以从表中获取结果以及它们各自的关系计数。
假设我有一个Person 实体与一个Friend 实体具有OneToMany 关系
Person 实体可能如下所示:
class Person
{
/**
* @ORM\OneToMany(...)
*/
protected $friends;
public function __construct()
{
$this->friends = new ArrayCollection();
}
...
}
我想要实现的经典 SQL 解决方案可能如下所示:
SELECT p.*, COUNT(f.id) as friendsCount
FROM Persons p
LEFT JOIN Friends f
ON f.person_id = p.id
GROUP BY p.id
现在我想知道这是否也可以在 DQL 中完成并将 count 值存储到 Person 实体中
假设我扩展 Person 实体,例如:(请记住,这只是一个想法)
class Person
{
/**
* @ORM\OneToMany(...)
*/
protected $friends;
protected $friendsCount;
public method __construct()
{
$this->friends = new ArrayCollection();
}
...
public function getFriendsCount()
{
return $this->friendsCount;
}
}
现在我无法找到如何从 DQL 填充实体中的计数值:
SELECT p, /* What comes here ? */
FROM AppBundle\Entity\Person p
LEFT JOIN p.friends f
GROUP BY p.id
PS:我知道我可以这样做:
$person->getFriends()->count();
甚至将其标记为额外懒惰以获取计数结果。
尽管这个 count 关系 示例很好地展示了我正在尝试做的事情。
(从 dql 填充实体的非 @ORM\Column 属性)
Doctrine 可以做到这一点吗?
这是否违反了一些可靠的原则? (建议零售价?)
你的想法的 Cookie ;)
【问题讨论】:
标签: symfony doctrine-orm count entity relationship