Sử dụng ManyToMany
giữa 2 thực thể liên quan đến một bảng thứ ba thường được gọi là bảng nối trong loại quan hệ này khi bạn xây dựng học thuyết DQL (truy vấn học thuyết) sẽ tự động tham gia bảng nối tùy thuộc vào bản chất của mối quan hệ mà bạn đã xác định là chú thích, vì vậy hãy xem xét truy vấn của bạn
$teamsingroup = $em->getRepository("AppBundle\Model\Entity\Team")
->createQueryBuilder('o')
->innerJoin('o.group', 't')
Bạn đang tham gia Team
thực thể có Group
thực thể trong innerJoin('o.group')
phần o
là bí danh cho thực thể Nhóm và o.group
đề cập đến thuộc tính được xác định trong Team
thực thể có tên là group
.
/**
* @ORM\ManyToMany(targetEntity="Groups", mappedBy="team")
*/
protected $group;
Trong đó có ManyToMany
chú thích được xác định cho loại học thuyết quan hệ này trước tiên sẽ tham gia bảng nhóm của bạn với bảng nối và sau đó tham gia bảng liên kết của bạn với bảng nhóm và SQL kết quả sẽ giống như
SELECT t.*
FROM teams t
INNER JOIN junction_table jt ON(t.id = jt.team_id)
INNER JOIN groups g ON(g.id = jt.group_id)
WHERE g.id = @group_id
Một điều khác liên quan đến cách bạn sắp xếp nhóm cho từng nhóm, bạn có thể giảm thiểu mã của mình bằng cách loại trừ createQueryBuilder
một phần trong vòng lặp, khi bạn đã xác định thuộc tính nhóm là ArrayCollection
tức là $this->team = new ArrayCollection();
trên mỗi đối tượng nhóm, bạn sẽ nhận được tập hợp các nhóm được liên kết với nhóm cụ thể đó bằng cách gọi getTeam()
chức năng trên đối tượng nhóm tương tự như mã bên dưới.
foreach ($groups as $group) {
$teamsingroup = $group->getTeam();
echo "</b>".$group->getGroupname()."</b></br>";
foreach ($teamsingroup as $teamingroup) {
echo $teamingroup->getTeam()."</br>";
}
}