2014-10-24 28 views
12

Birçok ilişkinin Doctrine ve Symfony2 ile nasıl çalıştığını anlamak için triyng yapıyorum.Symfony2 ile Doktrini kullanarak çoktan çoğa ilişkisi sorgula

ben resmi belgelere (goo.gl/GYcVE0) gösterilen örnek yeniden ettik ve ben iki Varlık Sınıfları var: Aşağıda görebileceğiniz gibi Kullanıcı ve Grup. Symfony2'deki ben Varlık bir sorgu oluşturmak gerektiğini

CREATE TABLE User (
    id INT AUTO_INCREMENT NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE = InnoDB; 
CREATE TABLE users_groups (
    user_id INT NOT NULL, 
    group_id INT NOT NULL, 
    PRIMARY KEY(user_id, group_id) 
) ENGINE = InnoDB; 
CREATE TABLE Group (
    id INT AUTO_INCREMENT NOT NULL, 
    PRIMARY KEY(id) 
) ENGINE = InnoDB; 
ALTER TABLE users_groups ADD FOREIGN KEY (user_id) REFERENCES User(id); 
ALTER TABLE users_groups ADD FOREIGN KEY (group_id) REFERENCES Group(id); 

sorundur ve bu durumda bende olmayan: benim DB güncellerseniz

<?php 
/** @Entity **/ 
class User 
{ 
    // ... 

    /** 
    * @ManyToMany(targetEntity="Group", inversedBy="users") 
    * @JoinTable(name="users_groups") 
    **/ 
    private $groups; 

    public function __construct() { 
     $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    // ... 
} 

/** @Entity **/ 
class Group 
{ 
    // ... 
    /** 
    * @ManyToMany(targetEntity="User", mappedBy="groups") 
    **/ 
    private $users; 

    public function __construct() { 
     $this->users = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    // ... 
} 

ben bu MySQL Şeması olsun Tablo users_group ile ilişkili bir varlık, bu tablo çerçeve tarafından otomatik olarak oluşturulduğundan.

Peki, bu ilişki tablosuna ilişkin bilgileri nasıl alabilirim? Örneğin, bir gruptaki tüm Kullanıcıları, users_group tablosunda görünen bir kimliği olan kullanıcıların olması gerekir.

Bunu DQL, QueryBuilder veya diğer yöntemleri kullanarak nasıl yapabilirim?

Çok teşekkürler.

+0

Kriterleri için mysql sorgusu yazabilir misiniz? bu yüzden DQL sorgusunda çevirmeyi deneyeceğiz –

+0

@M Khalid Junaid Örneğin bir gruptaki tüm kullanıcıları almam gerekiyor. Ham SQL kullanmak, SELECT u.id, u.name FROM Kullanıcıları u, Grup g, users_group ug WHERE ug.group_id = 5 VE u.id = ud.user_id gibi bir şey olmalıdır. Gördüğünüz gibi users_group tablosuna ilişkin Entity'ye ihtiyacım var. –

cevap

21

Size DQL sorguda kavşak tablo söz gerekmez groups mülkiyet User yılında varlık için Harita oluşturma bölümünü kendisi katılmak idare edecek

$em = $this->getContainer()->get('doctrine')->getManager(); 
$repository = $em->getRepository('YourNamespaceYourBundle:User'); 
$query = $repository->createQueryBuilder('u') 
    ->innerJoin('u.groups', 'g') 
    ->where('g.id = :group_id') 
    ->setParameter('group_id', 5) 
    ->getQuery()->getResult(); 

aşağıdaki gibi bir katılmak DQL sorgu yazabilirsiniz

+1

Teşekkür ederim, çok yararlı ;-) –

+0

Grup adı ve grup kimliği yoksa sorgulama ne olmalıdır? – Vidhi

+1

@Vidhi, grup isminin nerede olduğu gibi bir yeri ayarlayacaktır - - burada ('g.name =: group_name') -> setParameter ('group_name', $ group_name) ' –

İlgili konular