<?php
namespace App\Entity;
use App\Entity\Interfaces\DefaultEntity;
use App\Entity\Traits\ActiveTrait;
use App\Entity\Traits\DeleteTrait;
use App\Entity\Traits\SortOrderTrait;
use App\Entity\Traits\TitleAndContentTrait;
use App\Entity\Traits\TranslateTrait;
use App\Repository\ResourceCategoryRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Doctrine\Common\Collections\Criteria;
/**
* @Gedmo\Loggable
*/
#[ORM\Entity(repositoryClass: ResourceCategoryRepository::class)]
#[ORM\HasLifecycleCallbacks]
#[ORM\Table(name: 'resource_category')]
class ResourceCategory implements DefaultEntity
{
use TitleAndContentTrait;
use SortOrderTrait;
use ActiveTrait;
use DeleteTrait;
use TimestampableEntity;
use TranslateTrait;
#[ORM\Column(name: 'id', type: 'integer')]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
private readonly int $id;
#[ORM\OneToMany(mappedBy: 'category', targetEntity: Resource::class)]
private $resources;
public function __construct()
{
$this->resources = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
/**
* @return Collection<int, Resource>
*/
public function getResources(): Collection
{
return $this->resources;
}
public function getActiveResources(): Collection
{
$criteria = Criteria::create()
->andWhere(Criteria::expr()->eq('active', true))
->andWhere(Criteria::expr()->eq('deleted', false))
->orderBy(['sortOrder' => 'ASC'])
;
return $this->resources->matching($criteria);
}
public function addResource(Resource $resource): self
{
if (!$this->resources->contains($resource)) {
$this->resources[] = $resource;
$resource->setCategory($this);
}
return $this;
}
public function removeResource(Resource $resource): self
{
if ($this->resources->removeElement($resource)) {
// set the owning side to null (unless already changed)
if ($resource->getCategory() === $this) {
$resource->setCategory(null);
}
}
return $this;
}
}