2012-03-29 25 views
8

Digamos que tengo una entidad de Cuenta y una entidad AccountData (que almacena algunas propiedades menos utilizadas, como género, etc.).Doctrina 2: ¿Cómo buscar una entidad por el valor de su asociación?

La relación entre Account y AccountData es uno-a-uno, y la cuenta "posee" AccountData.

Estoy tratando de averiguar, utilizando Doctrine 2/Symfony 2, cómo obtener una cuenta de acuerdo con una propiedad en AccountData.

Por ejemplo, ¿cómo busco todas las cuentas con AccountData-> gender = 'female'?

Respuesta

15

El uso de consultas de Doctrine como esto debe hacer el truco:

$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(); 

Puede comprobar http://symfony.com/doc/current/book/doctrine.html#joining-to-related-records para una ejemplo usando una clase de repositorio en su lugar.

Espero que ayude.

+1

¿Debería ser join ('a.AccountData', 'd')? –

+0

@g, estás en lo correcto. – orourkedd

1

Algo así como:

$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(); 

El manual es muy útil: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html

Cuestiones relacionadas