Команда make:entity
Команда make:entity создаёт класс
сущности Doctrine ORM. Сущность - это PHP-класс,
связанный с таблицей базы данных. Команда
запускается в интерактивном режиме: она
последовательно спрашивает имя класса, имена
и типы полей, а также связи с другими
сущностями. После генерации класса команда
автоматически создаёт репозиторий и добавляет
маппинг в виде атрибутов #[ORM\Column].
Синтаксис
php bin/console make:entity [class] [--regenerate]
Первым параметром передаётся имя класса
сущности, например Article. Если имя не
указать, команда спросит его в интерактивном
режиме. Флаг --regenerate заставляет
команду заново сгенерировать существующий
класс, а не дописывать поля в конец файла.
Пример
Давайте создадим сущность для статьи:
php bin/console make:entity Article
Команда попросит указать поля. Введём поле
title типа string длиной 255,
затем поле content типа text и поле
createdAt типа datetime. После
завершения ввода будет создан файл:
<?php
namespace App\Entity;
use App\Repository\ArticleRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ArticleRepository::class)]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $content = null;
#[ORM\Column]
private ?\DateTimeImmutable $createdAt = null;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): static
{
$this->title = $title;
return $this;
}
public function getContent(): ?string
{
return $this->content;
}
public function setContent(string $content): static
{
$this->content = $content;
return $this;
}
public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeImmutable $createdAt): static
{
$this->createdAt = $createdAt;
return $this;
}
}
?>
Результат выполнения команды:
"created: src/Entity/Article.php"
"created: src/Repository/ArticleRepository.php"
Пример
Давайте добавим в существующую сущность
Article новое поле published типа
boolean. Для этого снова запустим команду
с именем класса:
php bin/console make:entity Article
Команда спросит имя нового поля и его тип.
После ввода поля published типа
boolean в класс будут дописаны свойство
и методы доступа:
<?php
namespace App\Entity;
use App\Repository\ArticleRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ArticleRepository::class)]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $content = null;
#[ORM\Column]
private ?\DateTimeImmutable $createdAt = null;
#[ORM\Column]
private ?bool $published = null;
public function getId(): ?int
{
return $this->id;
}
public function isPublished(): ?bool
{
return $this->published;
}
public function setPublished(bool $published): static
{
$this->published = $published;
return $this;
}
}
?>
Результат выполнения команды:
"updated: src/Entity/Article.php"
Пример
Команда умеет создавать связи между
сущностями. Давайте создадим сущность
User и свяжем её с Article
отношением многие-к-одному:
php bin/console make:entity User
Добавим поле name типа string, а
затем поле articles типа relation.
Команда спросит тип связи - выберем
OneToMany и укажем целевую сущность
Article. В классе User появится
коллекция статей:
<?php
namespace App\Entity;
use App\Repository\UserRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: UserRepository::class)]
class User
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
#[ORM\OneToMany(targetEntity: Article::class, mappedBy: 'author')]
private Collection $articles;
public function __construct()
{
$this->articles = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): static
{
$this->name = $name;
return $this;
}
public function getArticles(): Collection
{
return $this->articles;
}
public function addArticle(Article $article): static
{
if (!$this->articles->contains($article)) {
$this->articles->add($article);
$article->setAuthor($this);
}
return $this;
}
public function removeArticle(Article $article): static
{
if ($this->articles->removeElement($article)) {
if ($article->getAuthor() === $this) {
$article->setAuthor(null);
}
}
return $this;
}
}
?>
Результат выполнения команды:
"created: src/Entity/User.php"
"created: src/Repository/UserRepository.php"
"updated: src/Entity/Article.php"
Смотрите также
-
команда
make:migration,
которая создаёт миграцию по изменениям сущностей -
команда
doctrine:schema:update,
которая обновляет схему базы данных по сущностям -
команда
doctrine:database:create,
которая создаёт базу данных -
команда
make:crud,
которая генерирует CRUD-контроллер для сущности