[英]Doctrine many to many: count left join collection
注意 :這是來自Doctrine的許多后續文章:用戶喜歡本文嗎?
具有三個實體:User,Article,Comments和User和Comments之間的多對多關系,我需要從Article獲取評論集合,包括要在視圖上使用的虛擬屬性“ userLiked”(布爾) 。
//CommentRepository.php
public function findCommentsFromArticle($articleId,$userId)
{
$result = $this->createQueryBuilder('c')
->where('c.article = :articleId')
->addSelect('COUNT(u) AS userLiked', 'c')
->leftJoin("c.users", 'u', 'WITH', 'u.id = :userId')
->setParameters(['articleId' => $articleId, 'userId' => $userId])
->orderBy('c.id', 'ASC')
->getQuery()
->getResult();
dd($result);
}
這將轉儲以下內容:
如您所見,“ userFavorite”不在正確的位置,而是在Comment對象之外。 我怎樣才能解決這個問題?
也許嘗試下面的代碼:
//CommentRepository.php
public function findCommentsFromArticle($articleId,$userId)
{
$result = $this->createQueryBuilder('c')
->where('c.article = :articleId')
->addSelect('COUNT(u) AS userLiked', 'c')
->leftJoin('c.users', 'u')
->andWhere('u.id = :userId')
->setParameters(['articleId' => $articleId, 'userId' => $userId])
->orderBy('c.id', 'ASC')
->getQuery()
->getResult();
dd($result);
}
我終於找到了使用DQL的解決方案。
public function findCommentsFromArticle($articleId, $userId)
{
$em = $this->getEntityManager();
$query = $em->createQuery("select c.id,c.text, count(u) as userFavorite
from
App\Entity\Comments c
left join s.users u WITH u.id LIKE :userId
where c.article = :articleId
group by c.id");
$query->setParameters(['articleId' => $articleId, 'userId' => $userId]);
return $query->getResult();
}
我必須手動選擇列以附加虛擬屬性“ userFavorite”。 否則,它將同樣位於對象外部。
希望這對某人有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.