src/Entity/Post.php line 36

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace App\Entity;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\Common\Collections\Collection;
  13. use Doctrine\ORM\Mapping as ORM;
  14. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  15. use Symfony\Component\Validator\Constraints as Assert;
  16. /**
  17.  * @ORM\Entity(repositoryClass="App\Repository\PostRepository")
  18.  * @ORM\Table(name="symfony_demo_post")
  19.  * @UniqueEntity(fields={"slug"}, errorPath="title", message="post.slug_unique")
  20.  *
  21.  * Defines the properties of the Post entity to represent the blog posts.
  22.  *
  23.  * See https://symfony.com/doc/current/doctrine.html#creating-an-entity-class
  24.  *
  25.  * Tip: if you have an existing database, you can generate these entity class automatically.
  26.  * See https://symfony.com/doc/current/doctrine/reverse_engineering.html
  27.  *
  28.  * @author Ryan Weaver <weaverryan@gmail.com>
  29.  * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  30.  * @author Yonel Ceruto <yonelceruto@gmail.com>
  31.  */
  32. class Post
  33. {
  34.     /**
  35.      * @ORM\Id
  36.      * @ORM\GeneratedValue
  37.      * @ORM\Column(type="integer")
  38.      */
  39.     private ?int $id null;
  40.     /**
  41.      * @ORM\Column(type="string")
  42.      */
  43.     #[Assert\NotBlank]
  44.     private ?string $title null;
  45.     /**
  46.      * @ORM\Column(type="string")
  47.      */
  48.     private ?string $slug null;
  49.     /**
  50.      * @ORM\Column(type="string")
  51.      */
  52.     #[
  53.         Assert\NotBlank(message'post.blank_summary'),
  54.         Assert\Length(max255)
  55.     ]
  56.     private ?string $summary null;
  57.     /**
  58.      * @var string
  59.      *
  60.      * @ORM\Column(type="text")
  61.      */
  62.     #[
  63.         Assert\NotBlank(message'post.blank_content'),
  64.         Assert\Length(min10minMessage'post.too_short_content')
  65.     ]
  66.     private ?string $content null;
  67.     /**
  68.      * @ORM\Column(type="datetime")
  69.      */
  70.     private \DateTime $publishedAt;
  71.     /**
  72.      * @ORM\ManyToOne(targetEntity="App\Entity\User")
  73.      * @ORM\JoinColumn(nullable=false)
  74.      */
  75.     private ?User $author null;
  76.     /**
  77.      * @var Comment[]|Collection
  78.      *
  79.      * @ORM\OneToMany(
  80.      *      targetEntity="Comment",
  81.      *      mappedBy="post",
  82.      *      orphanRemoval=true,
  83.      *      cascade={"persist"}
  84.      * )
  85.      * @ORM\OrderBy({"publishedAt": "DESC"})
  86.      */
  87.     private Collection $comments;
  88.     /**
  89.      * @var Tag[]|Collection
  90.      *
  91.      * @ORM\ManyToMany(targetEntity="App\Entity\Tag", cascade={"persist"})
  92.      * @ORM\JoinTable(name="symfony_demo_post_tag")
  93.      * @ORM\OrderBy({"name": "ASC"})
  94.      */
  95.     #[Assert\Count(max4maxMessage'post.too_many_tags')]
  96.     private Collection $tags;
  97.     public function __construct()
  98.     {
  99.         $this->publishedAt = new \DateTime();
  100.         $this->comments = new ArrayCollection();
  101.         $this->tags = new ArrayCollection();
  102.     }
  103.     public function getId(): ?int
  104.     {
  105.         return $this->id;
  106.     }
  107.     public function getTitle(): ?string
  108.     {
  109.         return $this->title;
  110.     }
  111.     public function setTitle(?string $title): void
  112.     {
  113.         $this->title $title;
  114.     }
  115.     public function getSlug(): ?string
  116.     {
  117.         return $this->slug;
  118.     }
  119.     public function setSlug(string $slug): void
  120.     {
  121.         $this->slug $slug;
  122.     }
  123.     public function getContent(): ?string
  124.     {
  125.         return $this->content;
  126.     }
  127.     public function setContent(?string $content): void
  128.     {
  129.         $this->content $content;
  130.     }
  131.     public function getPublishedAt(): \DateTime
  132.     {
  133.         return $this->publishedAt;
  134.     }
  135.     public function setPublishedAt(\DateTime $publishedAt): void
  136.     {
  137.         $this->publishedAt $publishedAt;
  138.     }
  139.     public function getAuthor(): ?User
  140.     {
  141.         return $this->author;
  142.     }
  143.     public function setAuthor(User $author): void
  144.     {
  145.         $this->author $author;
  146.     }
  147.     public function getComments(): Collection
  148.     {
  149.         return $this->comments;
  150.     }
  151.     public function addComment(Comment $comment): void
  152.     {
  153.         $comment->setPost($this);
  154.         if (!$this->comments->contains($comment)) {
  155.             $this->comments->add($comment);
  156.         }
  157.     }
  158.     public function removeComment(Comment $comment): void
  159.     {
  160.         $this->comments->removeElement($comment);
  161.     }
  162.     public function getSummary(): ?string
  163.     {
  164.         return $this->summary;
  165.     }
  166.     public function setSummary(?string $summary): void
  167.     {
  168.         $this->summary $summary;
  169.     }
  170.     public function addTag(Tag ...$tags): void
  171.     {
  172.         foreach ($tags as $tag) {
  173.             if (!$this->tags->contains($tag)) {
  174.                 $this->tags->add($tag);
  175.             }
  176.         }
  177.     }
  178.     public function removeTag(Tag $tag): void
  179.     {
  180.         $this->tags->removeElement($tag);
  181.     }
  182.     public function getTags(): Collection
  183.     {
  184.         return $this->tags;
  185.     }
  186. }