Niedawno opracowałem problem z zapytaniami o tabele łączenia zależności ManyToMany
, rozwiązanie było takie samo jak to answer i zastanawiałem się, jak to działa. powiedzmy Mam proste ManyToMany
związek między groups
i team
, nie będzie groups_team
tabele, które zostaną automatycznie utworzone tutajW jaki sposób łączenie wewnętrzne działa na relacji wiele do wielu za pomocą Doctrine i Symfony2
podmiot grupy
/**
* 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 :)
podmiotu zespół
/**
* 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]
w celu aby uzyskać wszystkie zespoły w grupie, musiałbym zapytać o tabelę groups_team
table.i bezpośrednio zapytałabym o tabelę tylko w mysql, ale w Symfony mam to zrobić
$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>";
}
}
Czy ktoś może mi wyjaśnić, w jaki sposób innerJoin
pracuje, a co za tym pojęcia, może kilka dokumentację, aby dowiedzieć się o tym. czy istnieje lepszy sposób na zrobienie tego za pomocą symfony i doktryny.
dziękuję, to zmniejszyło mój kod i to zaczęło mnie na drodze do wymyślenia bardziej usprawnionego kodu. To odpowiadało na moje pytanie w 100%. SO to świetna platforma. +1 –