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();
}