2012-03-29 17 views
8

Załóżmy, że mam podmiot Konto i jednostkę Account Account (która przechowuje mniej używane nieruchomości, takie jak płeć itp.).Doctrine 2: Jak wyszukać podmiot według wartości jego powiązania?

Relacja między kontem a danymi konta to transakcja jeden-na-jeden, a konto "jest właścicielem" danych konta.

Próbuję dowiedzieć się, używając Doctrine 2/Symfony 2, jak utworzyć konto zgodnie z właściwością w Account Account.

Na przykład, jak wyszukać wszystkie konta z AccountData-> gender = "female"?

Odpowiedz

15

Korzystanie Query Builder doktryny jak to powinno załatwić sprawę:

$repository = $this->getDoctrine()->getRepository('YourBundle:Account'); 

$query = $repository->createQueryBuilder('a') 
    ->join('a.AccountData', 'd') 
    ->where('d.gender = :gender') 
    ->setParameter('gender', 'female') 
    ->getQuery(); 

$female_accounts = $query->getResult(); 

Można sprawdzić http://symfony.com/doc/current/book/doctrine.html#joining-to-related-records dla przykład przy użyciu klasy repozytorium.

Mam nadzieję, że to pomaga.

+1

Czy to powinno być dołączenie ("a.AccountData", "d")? –

+0

@g, masz rację. – orourkedd

1

Coś jak:

$em = $this->getEntityManager(); 
    $qb = $em->createQueryBuilder(); 

    $qb->addSelect('account'); 
    $qb->addSelect('accountData'); 

    $qb->from('ZaysoCoreBundle:Account','account'); 

    $qb->leftJoin('account.accountData', 'accountData'); 

    $qb->andWhere($qb->expr()->eq('accountData.gender',$qb->expr()->literal('female'))); 

    $accounts = $qb->getQuery()->getResult(); 

Instrukcja jest bardzo przydatne: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html