如何将这个简单的 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
。如果您需要订购不止一件东西(orderBy
和 addOrderBy
),您也可以这样做。
【讨论】:
抱歉,它对我来说效果不佳,因为无论 user1 是发送者还是接收者,我都想显示 user1 和 user2 之间的最后一条消息以上是关于如何将这个简单的 sql 查询转换为学说 querybuilder的主要内容,如果未能解决你的问题,请参考以下文章
如何将这个简单的Entity Framework查询转换为标准SQL查询?