Я пытаюсь получить запрос с addSelect в отношении ManyToMany, чтобы получить только некоторые поля отношения. У меня есть две следующие сущности:
class Maquina
{
public function __construct() {
$this->clusters = new ArrayCollection();
}
/**
* @ORM\Column(name="nombre", type="string", length=150)
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Cluster", inversedBy="maquinas")
* @ORM\JoinTable(name="cluster_maquina",
* joinColumns={@ORM\JoinColumn(name="maquinaId", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="clusterId", referencedColumnName="id")}
* )
*/
private $clusters;
}
class Cluster
{
public function __construct(){
$this->maquinas = new ArrayCollection();
}
/**
* @ORM\Column(name="nombre", type="string", length=150)
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Maquina", mappedBy="clusters")
*/
private $maquinas;
}
Я хочу получить результат запроса с данными хоста, включая имена кластеров, которые есть у хоста. Я пробую следующее (в примере, где хост имеет 2 кластера)
$qb = $this->em->createQueryBuilder();
$qb->select('M')
->from('App\Entity\Maquina', 'M')
->where('M.id = 1')
->leftJoin('M.clusters', 'C')
->addSelect('C');
$qb->getQuery()->getArrayResult();
Я получаю результат массива, например:
Array ( [id] => 1 [name] => HostName [clusters] => Array ( [0] => Array ( [id] => 1 [name] => cluster1 ) [1] => Array ( [id] => 2 [name] => cluster2 ) ) )
Но я бы хотел получить только имя поля кластеров в addSelect:
Array ( [id] => 1 [name] => HostName [clusters] => Array ( [0] => Array ( [name] => cluster1 ) [1] => Array ( [name] => cluster2 ) ) )
or
Array ( [id] => 1 [name] => HostName [clusters] => Array ( [0] => cluster1 [1] => cluster2 )
Я пробую:
$qb = $this->em->createQueryBuilder();
$qb->select('M')
->from('App\Entity\Maquina', 'M')
->where('M.id = 1')
->leftJoin('M.clusters', 'C')
->addSelect('C.name');
$qb->getQuery()->getArrayResult();
Но с этим запросом будет 2 результата, по одному для каждого кластера с данными хоста повторяется.
Есть ли способ получить то, что я хочу, без каких-либо логов c вне запроса?
Большое спасибо