docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)
uk/docs/doctrine/doctrine-behaviors/blameable.md
новий файл +63
−0
Blameable
Зберігає, хто створив, востаннє змінив і видалив сутність.
Сутність
use Doctrine\ORM\Mapping as ORM;
use Ufo\DoctrineBehaviors\Contract\Entity\BlameableInterface;
use Ufo\DoctrineBehaviors\Model\Blameable\BlameableTrait;
#[ORM\Entity]
class Category implements BlameableInterface
{
use BlameableTrait;
#[ORM\Id, ORM\GeneratedValue, ORM\Column]
private ?int $id = null;
}
Мапінг
Залежить від параметра doctrine_behaviors_blameable_user_entity:
| Параметр | Поля createdBy, updatedBy, deletedBy |
|---|---|
не задано (null) |
рядкові колонки, nullable |
| клас сутності користувача | ManyToOne на цю сутність (колонки createdBy_id тощо, ON DELETE SET NULL) |
# config/services.yaml
parameters:
doctrine_behaviors_blameable_user_entity: App\Entity\User
Поле, вже змапене в сутності, бандл не чіпає.
Як це працює
Користувача повертає UserProviderInterface (див. Налаштування). Якщо він null (немає токена, консольна команда), значення не змінюються.
| Подія | Що відбувається |
|---|---|
prePersist |
createdBy і updatedBy, якщо вони порожні |
preUpdate |
updatedBy |
preRemove |
deletedBy |
Типовий UserProvider повертає об'єкт користувача з токена. Якщо параметр doctrine_behaviors_blameable_user_entity не задано, колонки рядкові — у такому разі або задайте параметр, або підставте провайдер, що повертає рядок (приклад getUserIdentifier() — у Налаштуваннях).
Використання
$category = new Category();
$entityManager->persist($category);
$entityManager->flush();
$category->getCreatedBy(); // App\Entity\User або рядок — залежно від мапінгу
$category->getUpdatedBy();
$category->getDeletedBy(); // null