Doctrine 原则2-如何使用DQL和分组进行搜索

Doctrine 原则2-如何使用DQL和分组进行搜索,doctrine,doctrine-orm,dql,Doctrine,Doctrine Orm,Dql,我不知道如何将我喜欢的搜索与按日期分组和DQL中的类别结合起来 说明: 我有一个搜索功能,可以在权重后搜索我的事件。。看起来是这样的: SELECT e as event, (CASE (e.name LIKE :searchterm) THEN 10 ELSE 0 END) + (CASE WHEN (e.name LIKE :searchtermFull) THEN 5 ELSE 0 END) AS weight F

我不知道如何将我喜欢的搜索与按日期分组和DQL中的类别结合起来

说明:

我有一个搜索功能,可以在权重后搜索我的事件。。看起来是这样的:

SELECT e as event,
  (CASE
     (e.name LIKE :searchterm) THEN 10
      ELSE 0
   END) +
   (CASE
      WHEN (e.name LIKE :searchtermFull) THEN 5
      ELSE 0
    END)

 AS weight

FROM
  \Entities\Event e

WHERE
  e.name LIKE :searchterm OR
  e.name LIKE :searchtermFull

  ORDER BY weight DESC
这很好,但现在我想按年份和日期(而不是时间)对这些搜索结果进行分组,因此我的项目按如下方式分组:

1月27日:

  • 事件1
  • 事件2
1月28日:

  • 事件3
  • 事件4
我还需要做的是将其分组到我的类别中,这样我最终将拥有:

1月27日:

  • 第一类
    • 事件1
    • 事件2
  • 第2类
    • 事件3
我的数据库事件表:

  • 名称varchar(255)
  • 说明varchar(255)
  • 创建日期时间
  • 地点id int(11)
  • eventdate日期时间
  • 主办方id int(11)
  • 已创建用户id int(11)
  • 国际组(11)
我的数据库类别表

  • id int(11)
  • 名称varchar(255)
  • 说明varchar(255)
我有一个事件实体和一个EventCategory实体,EventCategory所做的只是将类别id绑定到事件实体上

--更新-到目前为止我的sql--

DoctrineExtensions通过在autoloader中写入以下内容而包含:

$classLoader=new-Doctrine\Common\classLoader('DoctrineExtensions',ROOT.DS.“library”);
$classLoader->register()

您需要使用日期函数DAY、MONTH或YEAR(Mysql) 条令原样不支持这些函数,因此您需要编写自己的()或安装

按年度、月份分组记录

WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate) ORDER BY eventdate ASC
按年份、月份和日期对记录进行分组

WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate), DAY(eventdate) ORDER BY eventdate ASC

您需要使用日期函数DAY、MONTH或YEAR(Mysql) 条令原样不支持这些函数,因此您需要编写自己的()或安装

按年度、月份分组记录

WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate) ORDER BY eventdate ASC
按年份、月份和日期对记录进行分组

WHERE ... GROUP BY YEAR(eventdate), MONTH(eventdate), DAY(eventdate) ORDER BY eventdate ASC

您不需要编写自己的函数或安装第三方库。由于
datetime
存储为字符串,因此可以使用
SUBSTRING()
提取某些部分并按其分组

例如:


您不需要编写自己的函数或安装第三方库。由于
datetime
存储为字符串,因此可以使用
SUBSTRING()
提取某些部分并按其分组

例如:


谢谢你的答复。。我已经像你说的那样安装了DoctrineExtensions,但是当我尝试按年份进行分组时,我得到:“错误:无法按未定义的标识或结果变量进行分组。”。。在我上面的帖子中看到我在dql中尝试使用什么样的sql..使用DoctrineExtensions\Query\Mysql在文档顶部您的原始sql对我有效,您能用分组显示您的dql吗?我还建议您使用一个简单的dql,只是为了检查(类似于:选择eventdate GROUP BY YEAR(eventdate))在我的DQL中,我有:SELECT eventdate FROM\Entities\Event e GROUP BY YEAR(e.eventdate),但它仍然显示:错误:无法按未定义的标识或结果变量进行分组。感谢您的回复。。我已经像你说的那样安装了DoctrineExtensions,但是当我尝试按年份进行分组时,我得到:“错误:无法按未定义的标识或结果变量进行分组。”。。在我上面的帖子中看到我在dql中尝试使用什么样的sql..使用DoctrineExtensions\Query\Mysql在文档顶部您的原始sql对我有效,您能用分组显示您的dql吗?我还建议您使用一个简单的dql,只是为了检查(类似于:选择eventdate GROUP BY YEAR(eventdate))在我的DQL中,我有:SELECT eventdate FROM\Entities\Event e GROUP BY YEAR(e.eventdate),但它仍然显示:Error:Cannot GROUP BY undefined identification或result variable。