簡體   English   中英

多對多主義:算左聯接集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM