Doctrine DQL 连接表
Doctrine DQL join tables
对于我的 API 开发,我使用 apigility 和 doctrine。我目前正在编写一个用户可以喜欢 post 的端点。每个 post 都有一个作者。我有 2 个 tables,其中包含以下列和示例数据:
动作
id post_id user_id createdAt
1 10 1 0000-00-00 00:00:00
2 12 2 0000-00-00 00:00:00
3 13 3 0000-00-00 00:00:00
(post_id = post table 的外键)
(user_id = 源用户喜欢 post)
Post
id user_id createdAt
10 62 0000-00-00 00:00:00
12 4 0000-00-00 00:00:00
13 4 0000-00-00 00:00:00
(user_id = 用户的外键 table)
我需要的
我需要作者 (user_id) 拥有的 total_likes。这可以通过加入 post table 通过操作 table 查询。我已经尝试为此创建一个 DQL 查询:
// Get total likes an autor has received
$queryBuilder->select('count(p)')
->from('Db\Entity\Action', 'a')
->leftJoin('p.post', 'p')
->where('p.user = :user')
->setParameter('user', $targetUser);
$totalLikes = $queryBuilder->getQuery()->getSingleScalarResult();
哪个这个查询,我得到了错误的数字total_likes:
{
"total_likes": "2"
}
我必须如何更正此查询才能获得正确的用户点赞数?对于示例 table 数据,user_id=62 的 total_likes 应该返回给我:
{
"total_likes": "1"
}
试试这个:
// Get total likes an autor has received
$queryBuilder
->select('count(p)')
->from('Db\Entity\Action', 'a')
->leftJoin(
'Db\Entity\Post',
'p',
\Doctrine\ORM\Query\Expr\Join::WITH,
'a.post = p.id'
)
->where('p.user = :user')
->setParameter('user', $users);
$totalLikes = $queryBuilder->getQuery()->getSingleScalarResult();
}
对于我的 API 开发,我使用 apigility 和 doctrine。我目前正在编写一个用户可以喜欢 post 的端点。每个 post 都有一个作者。我有 2 个 tables,其中包含以下列和示例数据:
动作
id post_id user_id createdAt
1 10 1 0000-00-00 00:00:00
2 12 2 0000-00-00 00:00:00
3 13 3 0000-00-00 00:00:00
(post_id = post table 的外键) (user_id = 源用户喜欢 post)
Post
id user_id createdAt
10 62 0000-00-00 00:00:00
12 4 0000-00-00 00:00:00
13 4 0000-00-00 00:00:00
(user_id = 用户的外键 table)
我需要的
我需要作者 (user_id) 拥有的 total_likes。这可以通过加入 post table 通过操作 table 查询。我已经尝试为此创建一个 DQL 查询:
// Get total likes an autor has received
$queryBuilder->select('count(p)')
->from('Db\Entity\Action', 'a')
->leftJoin('p.post', 'p')
->where('p.user = :user')
->setParameter('user', $targetUser);
$totalLikes = $queryBuilder->getQuery()->getSingleScalarResult();
哪个这个查询,我得到了错误的数字total_likes:
{
"total_likes": "2"
}
我必须如何更正此查询才能获得正确的用户点赞数?对于示例 table 数据,user_id=62 的 total_likes 应该返回给我:
{
"total_likes": "1"
}
试试这个:
// Get total likes an autor has received
$queryBuilder
->select('count(p)')
->from('Db\Entity\Action', 'a')
->leftJoin(
'Db\Entity\Post',
'p',
\Doctrine\ORM\Query\Expr\Join::WITH,
'a.post = p.id'
)
->where('p.user = :user')
->setParameter('user', $users);
$totalLikes = $queryBuilder->getQuery()->getSingleScalarResult();
}