Я пытаюсь перечислить 3 самых популярных пользователей в таблице.
Вот сущности, которые у меня есть:
$ Пользователь, $ Post, $ PostLike.
Пользователь может ответить на вопрос, опубликовав сообщение $, каждое сообщение может нравиться или не нравиться пользователям.
В $ Post у меня есть: Пользователь может опубликовать вопрос, на который отвечает сообщение. В $ PostLike у меня есть: пользователь, который понравился или не понравился, пост и логическое значение (1, если нравится, 0 за неприязнь)
Так что я думаю, что могу получить все PostLike, где логическое == 1, то сгруппируйте их по $ Post, затем сгруппируйте результат по User и получите длину всех лайков или не лайков, которые получает пользователь.
Я застрял с запросом sql.
Кто-нибудь может мне помочь, пожалуйста?
Вот код сущности:
class StackUser
{
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $username;
public function getId(): ?int
{
return $this->id;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
}
.
class Post
{
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="posts")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\Column(type="text")
*/
private $ThePostHimself;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\PostLike", mappedBy="Post")
*/
private $postLikes;
public function __construct()
{
$this->postLikes = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getThePostHimself(): ?string
{
return $this->ThePostHimself;
}
public function setThePostHimself(string $ThePostHimself): self
{
$this->ThePostHimself = $ThePostHimself;
return $this;
}
/**
* @return Collection|PostLike[]
*/
public function getPostLikes(): Collection
{
return $this->postLikes;
}
public function addPostLike(PostLike $postLike): self
{
if (!$this->postLikes->contains($postLike)) {
$this->postLikes[] = $postLike;
$postLike->addPost($this);
}
return $this;
}
public function removePostLike(PostLike $postLike): self
{
if ($this->postLikes->contains($postLike)) {
$this->postLikes->removeElement($postLike);
$postLike->removePost($this);
}
return $this;
}
}
.
class PostLike
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="boolean")
*/
private $LikeDislike;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Post", inversedBy="postLikes")
*/
private $Post;
public function __construct()
{
$this->Post = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getLikeDislike(): ?bool
{
return $this->LikeDislike;
}
public function setLikeDislike(bool $LikeDislike): self
{
$this->LikeDislike = $LikeDislike;
return $this;
}
/**
* @return Collection|Post[]
*/
public function getPost(): Collection
{
return $this->Post;
}
public function addPost(Post $post): self
{
if (!$this->Post->contains($post)) {
$this->Post[] = $post;
}
return $this;
}
public function removePost(Post $post): self
{
if ($this->Post->contains($post)) {
$this->Post->removeElement($post);
}
return $this;
}
}