Doctrine 2:如何通过其关联值搜索实体?

10
假设我有一个账户实体(Account entity),还有一个账户数据实体(AccountData entity)(用于存储一些不经常使用的属性,例如性别等)。
Account和AccountData之间的关系是一对一(one-to-one),Account "拥有" AccountData。
我正在尝试使用Doctrine 2 / Symfony 2,根据AccountData中的属性查找帐户(Account)。
例如,如何搜索所有AccountData->gender ='female'的账户(Account)?
2个回答

18

使用Doctrine的查询构建器,像这样操作应该可以解决问题:

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

您可以查看http://symfony.com/doc/current/book/doctrine.html#joining-to-related-records,其中提供了使用存储库类的示例。

希望对您有所帮助。


1
应该是join('a.AccountData', 'd')吗? - g .

1

类似这样:

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

这个手册非常有用: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/query-builder.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接