futtern/src/Entity/MenuItem.php
2024-02-05 16:16:43 +01:00

67 lines
1.9 KiB
PHP

<?php declare(strict_types=1);
namespace App\Entity;
use App\Repository\MenuItemRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator;
use Symfony\Bridge\Doctrine\Types\UlidType;
use Symfony\Component\Uid\Ulid;
#[ORM\Entity(repositoryClass: MenuItemRepository::class)]
class MenuItem
{
public function __construct(
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\Column(type: UlidType::NAME, unique: true)]
#[ORM\CustomIdGenerator(class: UlidGenerator::class)]
public Ulid $id = new Ulid,
#[ORM\ManyToOne(inversedBy: 'menuItems')]
#[ORM\JoinColumn(nullable: false)]
public Vendor|null $vendor = null,
#[ORM\Column(nullable: true)]
public int|null $price = null,
/** @var Collection<int, MenuItemAlias> $aliases */
#[ORM\OneToMany(
mappedBy: 'menuItem',
targetEntity: MenuItemAlias::class,
orphanRemoval: true,
)]
public Collection $aliases = new ArrayCollection,
) {}
public function addAlias(MenuItemAlias $alias): static
{
if (! $this->aliases->contains($alias)) {
$this->aliases->add($alias);
$alias->menuItem = $this;
}
return false;
}
public function removeAlias(MenuItemAlias $alias): static
{
// set the owning side to null (unless already changed)
if ($this->aliases->removeElement($alias) && $alias->menuItem === $this) {
$alias->menuItem = null;
}
return $this;
}
public static function new(array $aliases): self
{
$menuItem = new self;
foreach ($aliases as $alias) {
$menuItem->addAlias($alias);
}
return $menuItem;
}
}