Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sự tham gia bên trong hoạt động như thế nào đối với mối quan hệ nhiều-nhiều bằng cách sử dụng Doctrine và Symfony2

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>";
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính toán chênh lệch ngày MySQL và PHP theo ngày

  2. Cách kiểm tra kích thước của tất cả các bảng trong cơ sở dữ liệu trong MySQL

  3. Kết nối Mysql bị từ chối trên localhost

  4. [email protected] install:`node-pre-gyp install --fallback-to-build`

  5. Cách kiểm tra đặc quyền của người dùng trong MySQL Workbench bằng GUI