【发布时间】:2018-10-25 20:42:30
【问题描述】:
我有两个实体 Person 和 Skill,其中一个 Person 可能有多种技能。
人
/**
* @ORM\Entity(repositoryClass="App\Repository\PersonRepository")
*/
class Person
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Skill", inversedBy="people")
*/
private $skills = [];
// other fields and getters/setters
}
技能
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\SkillRepository")
*/
class Skill
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Person", mappedBy="skills")
*/
private $people = [];
// other fields and getters/setters
}
我有一个表单,可以按技能过滤人员,每个技能都是一个复选框,我想要拥有该技能的人数以及复选框的标签。
结果是:
我使用以下本机查询让它工作:
SELECT s.id, COUNT(*) AS c
FROM skill s
JOIN person_skill ps /* table required by the M2M relation between person and skill */
ON s.id = ps.skill_id
GROUP BY s.id
如您所见,我需要在 ManyToMany 表上进行 JOIN 才能获得这些计数。
如何使用 Doctrine 的 DQL 而不是使用本机查询来做到这一点?
【问题讨论】: