如何将这个简单的 sql 查询转换为学说 querybuilder

Posted

技术标签:

【中文标题】如何将这个简单的 sql 查询转换为学说 querybuilder【英文标题】:how to convert this simple sql query to doctrine querybuilder 【发布时间】:2015-11-20 20:49:40 【问题描述】:

我正在使用 php 学说,我无法将此 sql 查询转换为 querybuilder 。 我对“分组依据”有疑问 请问有什么帮助吗?

SELECT * FROM message WHERE sender_id='2' OR receiver_id = '2' Group By (if(sender_id > receiver_id, sender_id, receiver_id)) , (if(sender_id

这就是我所做的,但我需要 groupby 条件

  $queryBuilder = $this->createQueryBuilder('m');
  $queryBuilder->where('m.sender = :user or m.receiver =:user')
  ->groupBy('m.sender','m.receiver')
  ->orderBy('m.createdAt', 'Desc')
  ->setParameter('user', $user);

【问题讨论】:

省去你的麻烦,直接写查询。 【参考方案1】:

这应该可行:

$qb = $this->createQueryBuilder('m');
$qb->where($qb->expr()->orX(
    $qb->expr()->eq('m.sender', ':user'),
    $qb->expr()->eq('m.receiver', ':user')
))->groupBy('m.sender')
->addGroupBy('m.receiver')
->orderBy('m.createdAt', 'DESC')
->setParameter('user', $user);

因此,除了将您的 where 语句分解为相关的 expr() 语句 (documentation) 之外,唯一的其他更改是将您的 groupBy 拆分为 groupBy,然后再拆分为 addGroupBy。如果您需要订购不止一件东西(orderByaddOrderBy),您也可以这样做。

【讨论】:

抱歉,它对我来说效果不佳,因为无论 user1 是发送者还是接收者,我都想显示 user1 和 user2 之间的最后一条消息

以上是关于如何将这个简单的 sql 查询转换为学说 querybuilder的主要内容,如果未能解决你的问题,请参考以下文章

在 aend 框架中将 sql 转换为学说 orm

如何将这个简单的Entity Framework查询转换为标准SQL查询?

查询将查询转换为HTML并通过电子邮件发送

将学说查询生成配置为小写

如何使用 jOOQ 将 Oracle PL/SQL 常量作为参数传递?

如何删除学说 Doctrine Raw Sql 查询中的特定 dql 部分?