繁体   English   中英

Symfony Doctrine findBy然后映射

[英]Symfony Doctrine findBy and then map

基本上我想用doctrine执行这个mysql查询:

select distinct user_id from work_hour where project_id = ?;

但我不知道如何用漂亮的Doctrine代码来做到这一点。 是否可以使它看起来像下面的伪代码或我是否必须使用查询构建器?:

$project = new Project();
...
$entities = $em->getRepository('AppBundle:WorkHour')
    ->findByProject($project)->selectUser()->distinct();

其中$ entities是User对象的数组

WorkHour和Project具有ManyToOne关系

WorkHour和User具有ManyToOne关系

你需要使用一个QueryBuilder ,但这仍然是一个“ 漂亮的Doctrine代码 ”,看起来仍然像你的伪代码。
这样的事情应该有效:

$queryBuilder = $em->createQueryBuilder();

$query = queryBuilder
        ->select('u')
        ->distinct()
        ->from('AppBundle:User', 'u')
        ->join('AppBundle:WorkHour', 'wh')
        ->where('u.workHour = wh')
        ->andWhere('wh.project = :project')
        ->getQuery();

$query->setParameter(':project', $project);

$entities = $query->getResult();
public function findByProject($project)
{ 
    $qb = $this->getEntityManager()->createQueryBuilder('User');
    $qb
        ->select('User')
        ->from('Path\Bundle\Entity\User', 'User')
        ->join('Path\Bundle\Entity\WorkHour', 'wh',
            'WITH', 'User.workHour = wh')
        ->where('wh.project = :project'))
        ->distinct()
        ->setParameter('project', $project)
    ;

    $query = $qb->getQuery();

    return $query->getResult();
}

如果您有一个复杂的查询,您应该在QueryBuilder中执行它,它会更有效。

http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html

如果你有复杂的查询,你不应该直接进入控制器,它不应该知道这个逻辑,你必须在存储库中执行它并从那里调用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM