原则 2:QueryBuilder 加入子查询
Posted
技术标签:
【中文标题】原则 2:QueryBuilder 加入子查询【英文标题】:Doctrine 2: QueryBuilder Join with subquery 【发布时间】:2021-07-29 13:03:15 【问题描述】:我需要将原生查询转换为教义查询。
本机查询
select u.*, v.browser_id
from users u
left join visits v
on u.id = v.user_id
and v.id = (
select max(id) from visits v2
where v2.user_id = u.id
)
您可以在这里看到我需要选择使用他们访问过的最新浏览器的用户
因此,要将此查询转换为 DQL,我知道我需要这样做
$queryBuilder->leftJoin('u.visits', 'lastVis', Join::WITH,
// ????
);
但我不知道具体是什么。也许有人会很快解决这个问题?
【问题讨论】:
【参考方案1】:谢谢,看来我找到了解决办法:)
$subQuery = $this->entityManager->createQueryBuilder()
->select('MAX(vis2.id)')
->from(Visit::class, 'vis2')
->where('vis2.user = u.id');
$this->entityManager->createQueryBuilder()
->select('u')
->from(User::class, 'u')
->leftJoin(
'u.visits', 'vis',
Join::WITH, sprintf('vis.id = (%s)', $subQuery->getDQL()),
);
【讨论】:
以上是关于原则 2:QueryBuilder 加入子查询的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?
如何使用 Cassandra 中的 QueryBuilder 定义具有 2 个条件的 Where 查询?
如何将这个简单的 sql 查询转换为学说 querybuilder