У меня есть две сущности Человек и Умение , где Человек может иметь несколько навыков.
Человек
/**
* @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
Как видите, мне требуется JOIN для таблицы ManyToMany, чтобы получить эти значения.
Как я могу сделать это с помощью DQL Doctrine вместо использования нативного запроса?