<?phpnamespace App\Entity;use App\Repository\QuestionRepository;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\DBAL\Types\Types;use Doctrine\ORM\Mapping as ORM;use Gedmo\Mapping\Annotation as Gedmo;use Gedmo\Timestampable\Traits\TimestampableEntity;#[ORM\Entity(QuestionRepository::class)]class Question{ use TimestampableEntity; #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id; #[ORM\Column] private ?string $name; /** * @Gedmo\Slug(fields={"name"}) */ #[ORM\Column(length: 100, unique: true)] private ?string $slug; #[ORM\Column(type: Types::TEXT)] private ?string $question; #[ORM\ManyToOne(inversedBy: 'questions')] #[ORM\JoinColumn(nullable: false)] private User $askedBy; #[ORM\Column] private int $votes = 0; #[ORM\OneToMany('question', Answer::class, orphanRemoval: true)] private Collection $answers; #[ORM\ManyToOne(inversedBy: 'questions')] #[ORM\JoinColumn(nullable: false)] private Topic $topic; #[ORM\Column] private bool $isApproved = false; #[ORM\ManyToOne] private User $updatedBy; public function __construct() { $this->answers = new ArrayCollection(); } public function __toString() { return $this->name; } public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getSlug(): ?string { return $this->slug; } public function setSlug(string $slug): self { $this->slug = $slug; return $this; } public function getQuestion(): ?string { return $this->question; } public function setQuestion(string $question): self { $this->question = $question; return $this; } public function getAskedBy(): ?User { return $this->askedBy; } public function setAskedBy(?User $askedBy): self { $this->askedBy = $askedBy; return $this; } public function getVotes(): int { return $this->votes; } public function getVotesString(): string { $prefix = $this->getVotes() >= 0 ? '+' : '-'; return sprintf('%s %d', $prefix, abs($this->getVotes())); } public function setVotes(int $votes): self { $this->votes = $votes; return $this; } public function upVote(): self { $this->votes++; return $this; } public function downVote(): self { $this->votes--; return $this; } /** * @return Collection|Answer[] */ public function getAnswers(): Collection { return $this->answers; } public function addAnswer(Answer $answer): self { if (!$this->answers->contains($answer)) { $this->answers[] = $answer; $answer->setQuestion($this); } return $this; } public function removeAnswer(Answer $answer): self { if ($this->answers->removeElement($answer)) { // set the owning side to null (unless already changed) if ($answer->getQuestion() === $this) { $answer->setQuestion(null); } } return $this; } public function getTopic(): ?Topic { return $this->topic; } public function setTopic(?Topic $topic): self { $this->topic = $topic; return $this; } public function getIsApproved(): bool { return $this->isApproved; } public function setIsApproved(bool $isApproved): void { $this->isApproved = $isApproved; } public function getUpdatedBy(): ?User { return $this->updatedBy; } public function setUpdatedBy(User $updatedBy): void { $this->updatedBy = $updatedBy; }}