<?php
namespace App\Entity;
use App\Repository\SemanticTagRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
#[ORM\Entity(repositoryClass: SemanticTagRepository::class)]
class SemanticTag
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\ManyToOne(targetEntity: Project::class, inversedBy: 'semanticTags')]
#[ORM\JoinColumn(onDelete: 'CASCADE')]
private $project;
#[ORM\ManyToOne(targetEntity: Workroom::class, inversedBy: 'semanticTags')]
#[ORM\JoinColumn(onDelete: 'CASCADE')]
private $workroom;
#[ORM\Column(type: 'string', length: 255)]
private $name;
#[ORM\Column(type: 'string', length: 255, unique: true)]
#[Assert\NotBlank]
private $code;
#[ORM\ManyToMany(targetEntity: ReadingCard::class, mappedBy: 'semanticTag')]
private $readingCards;
#[ORM\Column(type: 'string', nullable: false)]
private $color;
/** T2 — parent_id pour hiérarchie de tags (Méthodologie > Quantitative > Statistiques). */
#[ORM\ManyToOne(targetEntity: SemanticTag::class)]
#[ORM\JoinColumn(name: 'parent_id', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
private ?SemanticTag $parent = null;
public function __construct()
{
$this->readingCards = new ArrayCollection();
}
public function getParent(): ?SemanticTag { return $this->parent; }
public function setParent(?SemanticTag $parent): self { $this->parent = $parent; return $this; }
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 getCode(): ?string
{
return $this->code;
}
public function setCode(string $code): self
{
$this->code = $code;
return $this;
}
/**
* @return Collection|ReadingCard[]
*/
public function getReadingCards(): Collection
{
return $this->readingCards;
}
public function addReadingCard(ReadingCard $readingCard): self
{
if (!$this->readingCards->contains($readingCard)) {
$this->readingCards[] = $readingCard;
$readingCard->addSemanticTag($this);
}
return $this;
}
public function removeReadingCard(ReadingCard $readingCard): self
{
if ($this->readingCards->removeElement($readingCard)) {
$readingCard->removeSemanticTag($this);
}
return $this;
}
/**
* @return string
*/
public function getColor(): string
{
return $this->color;
}
/**
* @param string $color
* @return $this
*/
public function setColor(string $color): self
{
$this->color = $color;
return $this;
}
/**
* @return Project|null
*/
public function getProject(): ?Project
{
return $this->project;
}
/**
* @param Project|null $project
* @return $this
*/
public function setProject(?Project $project): self
{
$this->project = $project;
return $this;
}
/**
* @return Workroom|null
*/
public function getWorkroom(): ?Workroom
{
return $this->workroom;
}
/**
* @param Workroom|null $workroom
* @return $this
*/
public function setWorkroom(?Workroom $workroom): self
{
$this->workroom = $workroom;
return $this;
}
}