首页 > 解决方案 > Symfony Doctrine SortBy ToMany 关系对象

问题描述

我有实体帖子和点,它们通过 oneToMany 关系连接。我想要 make 方法,该方法将返回具有最多相关评论数的对象。可能吗?请帮忙,我没有任何想法。

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/ordered-associations.html - 我应该使用这个吗?

实体: 职位:

/**
 * @ORM\Entity(repositoryClass="App\Repository\PostRepository")
 */
class Post
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var Points
     * @ORM\OneToMany(targetEntity="Points", mappedBy="post", fetch="EAGER")
     */
    private $points;

    /**
     * @return Collection|Points[]
     */
    public function getPoints(): Collection {
        return $this->points;
    }

...

积分

/**
 * @ORM\Entity(repositoryClass="App\Repository\PointsRepository")
 */
class Points
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var Post
     * @ORM\ManyToOne(targetEntity="Post", inversedBy="points",  fetch="EAGER")
     */
    private $post;

    public function getPost(): Post {
        return $this->post;
    }

    public function setPost(Post $post ){
        $this->post = $post;
    }
...

标签: symfonydoctrine

解决方案


假设您已经能够返回带有积分的帖子,您可以尝试这样的事情:

在 App\Repository\PostRepository 中:

public function postsByPoints() {
    return $this->getEntityManager()->createQueryBuilder()
        ->select('p.post, count(pt.points) N)
        ->from('App:Points', 'pt')
        ->join('pt.post', 'p')
        ->where('some where clause') <- delete this if you're not selecting a subset
        ->groupBy('p.post')
        ->orderBy('N')
        ->getQuery()->getResult();
}

在某些控制器中:

$em = $this->getDoctrine()->getManager();
$postsByPoints = $em->getRepository('App:Post')->postsByPoints();

注意:未测试


推荐阅读