Recentemente ho risolto un problema con l'interrogazione delle tabelle di unione delle relazioni ManyToMany
, la soluzione era uguale a questa answer e mi chiedevo come funziona. Diciamo che ho un semplice ManyToMany
rapporto tra groups
e team
, ci sarà un groups_team
tabelle che verranno automaticamente creati quiCome funziona inner join su una relazione molti-a-molti utilizzando Doctrine e Symfony2
gruppi entità
/**
* Groups
*
* @ORM\Table(name="groups")
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\GroupsRepository")
*/
class Groups {
/**
* @ORM\ManyToMany(targetEntity="Team", inversedBy="group")
*/
protected $team;
public function __construct() {
$this->team = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="groupname", type="string", length=255)
*/
private $groupname;
//obligatory getters and setters :)
entità squadra
/**
* Team
*
* @ORM\Table(name="team")
* @ORM\Entity(repositoryClass="AppBundle\Model\Repository\TeamRepository")
*/
class Team {
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
public function __construct(){
$this->group = new ArrayCollection();
}
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="teamname", type="string", length=255)
*/
private $team;
//[setters and getters here]
al fine per ottenere tutte le squadre in un gruppo avrei dovuto interrogare la tabella groups_team
. avrei direttamente interrogato la tabella solo in mysql ma in symfony devo fare questo
$groups = $em->getRepository("AppBundle\Model\Entity\Groups")->findBy(array('tournament' => $tournament->getId()));
//get all teams with group id in groups_team table
foreach ($groups as $group) {
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")->createQueryBuilder('o')
->innerJoin('o.group', 't')
->where('t.id = :group_id')
->setParameter('group_id', $group->getId())
->getQuery()->getResult();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}
Qualcuno può spiegarmi come la innerJoin
funziona e cosa è il concetto alla base di questo, forse un paio di documentazione per conoscere questo. c'è un modo migliore per farlo con symfony e la dottrina.
grazie, questo ha ridotto il mio codice, e mi ha iniziato a pensare a un codice più snello. Questo ha risposto alla mia domanda al 100%. SO è una grande piattaforma. +1 –