symfony - 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;
}
...
解决方案
假设您已经能够返回带有积分的帖子,您可以尝试这样的事情:
在 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();
注意:未测试
推荐阅读
- html - 默认css如何影响呈现的html对象页面
- asp.net - 实现身份验证时发生 InvalidOperationException
- amazon-web-services - 解析参数“--parameters”时出错:预期:“=”,收到:“P”
- ruby-on-rails - rails中未定义的方法或局部变量
- javascript - 如何将位于视图中的 Javascript 值传递给 C# 方法
- docker - 如何使用 Docker 工具箱退出在 Windows 10 Home 中启动的 Ubuntu Bash?
- windows - “桌面”、“文档”等文件夹是否在 Windows 上的文件系统级别本地化?
- vue.js - 带有 SCSS 循环的 Vue.js 转换不起作用
- c - 为什么在使用带有结构值的 malloc 时 -Wsign-conversion 编译器警告?
- django - Django注册后无法登录用户