src/Entity/Label.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Symfony\Component\PropertyAccess\PropertyAccess;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. use Gedmo\Blameable\Traits\BlameableEntity;
  9. use Gedmo\Timestampable\Traits\TimestampableEntity;
  10. use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait;
  11. use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
  12. use App\Repository\LabelRepository;
  13. #[ORM\Entity(repositoryClassLabelRepository::class)]
  14. class Label implements TranslatableInterface
  15. {
  16.     use BlameableEntity//Hook blameable behaviour. Updates createdBy, updatedBy fields
  17.     use TimestampableEntity//Hook timestampable behaviour. Updates createdAt, updatedAt fields 
  18.     use TranslatableTrait;
  19.     #[Assert\Valid]
  20.     protected $translations;
  21.     
  22.     #[ORM\Id]
  23.     #[ORM\GeneratedValue(strategy"IDENTITY")]
  24.     #[ORM\Column()]
  25.     private ?int $id null;
  26.     #[ORM\Column(length255uniquetrue)]
  27.     private ?string $slug null;
  28.     #[ORM\OneToOne(cascade: ['persist''remove'])]
  29.     private ?Media $icon null;
  30.     #[ORM\ManyToMany(targetEntityProduct::class, mappedBy'labels')]
  31.     private Collection $products;
  32.     public function __call($method$arguments)
  33.     {
  34.         return PropertyAccess::createPropertyAccessor()->getValue($this->translate(), $method);
  35.     }
  36.     public function __construct()
  37.     {
  38.         $this->products = new ArrayCollection();
  39.     }
  40.     public function __toString()
  41.     {
  42.         return $this->getName();
  43.     }
  44.     public function getId(): ?int
  45.     {
  46.         return $this->id;
  47.     }
  48.     public function getSlug(): ?string
  49.     {
  50.         return $this->slug;
  51.     }
  52.     public function setSlug(string $slug): self
  53.     {
  54.         $this->slug $slug;
  55.         return $this;
  56.     }
  57.     public function getIcon(): ?Media
  58.     {
  59.         return $this->icon;
  60.     }
  61.     public function setIcon(?Media $icon): self
  62.     {
  63.         $icon->setDirectory('label');
  64.         $this->icon $icon;
  65.         return $this;
  66.     }
  67.     /**
  68.      * @return Collection<int, Product>
  69.      */
  70.     public function getProducts(): Collection
  71.     {
  72.         return $this->products;
  73.     }
  74.     public function addProduct(Product $product): self
  75.     {
  76.         if (!$this->products->contains($product)) {
  77.             $this->products->add($product);
  78.             $product->addLabel($this);
  79.         }
  80.         return $this;
  81.     }
  82.     public function removeProduct(Product $product): self
  83.     {
  84.         if ($this->products->removeElement($product)) {
  85.             $product->removeLabel($this);
  86.         }
  87.         return $this;
  88.     }
  89.     public function getTranslatedName($locale)
  90.     {
  91.         foreach ($this->translations as $translation) {
  92.             if ($translation->getLocale() === $locale) {
  93.                 return $translation->getName() ?? $translation->getSlug();
  94.             }
  95.         }
  96.         return null;
  97.     }
  98. }