栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

制定复杂的Doctrine2 DQL查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

制定复杂的Doctrine2 DQL查询

对于您的特定要求,即要求从

event_attendance_person
同一日历的过去一年参加过多个事件的人员到提供的事件的日历,因此在简单的Mysql查询中,您可以联接表以获取每个人的ID的不同事件的计数,即
COUNT(DISTINCTe.id)
和有条件的对提供的事件ID进行计数让我们说我想让参加事件的人员具有ID,
2228
因此对于这种起诉案件,您可以这样做,
COUNT(CASEWHEN e.id = 2228 THEN 1END)
这将使您为参加此事件的人员的计数为1,为参加事件的人员的计数为0错过该事件,此条件计数的原因是因为我没有使用事件ID的where过滤器,我已经通过使用Haves子句克服了这一问题,并且在过去的一年中,一个简单的where子句是
WHERee.dateTo<DATE_FORMAT(NOW(),'%Y-01-01 00:00:00')

SELECt p.*,COUNT(DISTINCT e.id) total_events,COUNT(CASE WHEN e.id = 2228 THEN 1 END) count_eventFROM `event_attendance_person` pJOIN `event_event` e ON(p.`eventId` = e.id )JOIN `event_calendar` c ON(e.`calendar` =c.`id`)WHERe e.`dateTo` < DATE_FORMAT(NOW() ,'%Y-01-01 00:00:00')GROUP BY p.`personId`HAVINg count_event = 1 AND total_events > 1ORDER BY total_events DESC

您可以在您的Mysql服务器上测试此查询


现在出现了理论部分,您可以在DQL中将上述查询复制为

$DQL="SELECt p,COUNT(DISTINCT e.id) AS total_events, COUNT(CASE WHEN e.id = 2228 THEN 1 END) AS count_event FROM NamespaceYourBundle:EventAttendencePerson p JOIN p.events e JOIN e.calandar c WHERe e.dateTo < :dateTo GROUP BY p.personId HAVINg total_events = 1 AND count_event >1 ORDER BY c DESC";

对于上述DQL,我假设您已经在实体之间映射了关系,例如下面的上述查询是您的实体中必须存在的强制性关系

  • 加入p.events e 现在p是实体的别名

    NamespaceYourBundle:EventAttendencePerson
    EventAttendencePerson
    实体必须指向您的
    Event
    实体,这样
    ON(p.eventId = e.id )
    才能实现部分。

  • 加入e.calandar c 现在

    Event
    实体必须指向您的
    Calendar
    实体才能实现
    ON(e.calendar =c.id)


然后,您可以通过使用doctrine的paginator类来按以下方式运行DQL

use DoctrineORMToolsPaginationPaginator;$query = $DM->createQuery($DQL)         ->setParameter('dateTo', date("Y-01-01 00:00:00"))         ->setFirstResult(0)->setMaxResults(100);$Persons = new Paginator($query, $fetchJoinCollection = true);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号