Актуальні помилки Doctrine Helper

← Актуальні помилки Doctrine Helper

Ashterix

docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)

uk/docs/doctrine/doctrine-helper/known_issues/open.md новий файл +13 −0

1 + # Актуальні помилки Doctrine Helper
2 +
3 + Відомі помилки й нестиковки поточної версії `ufo-tech/doctrine-helper` (1.1.0). Виправлені — на сторінці [Виправлені помилки](/docs/doctrine/doctrine-helper/known_issues/fixed).
4 +
5 + <include>(.issues/autoincrement-interface-mismatch.md)
6 +
7 + ---
8 +
9 + <include>(.issues/enum-null-value.md)
10 +
11 + ---
12 +
13 + <include>(.issues/readme-errors.md)

uk/docs/doctrine/doctrine-helper/known_issues/.issues/autoincrement-interface-mismatch.md новий файл +29 −0

1 + ### AutoIncrementIdTrait несумісний з IHaveAutoincrementId
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 1.0.0 — 1.1.0 (поточна). Перевірено запуском на PHP 8.4.
5 + :::
6 +
7 + **Симптом.** Клас, що реалізує `IHaveAutoincrementId` і використовує `AutoIncrementIdTrait`, не завантажується:
8 +
9 + ```text
10 + Fatal error: Declaration of App\Entity\Customer::getId(): ?int must be compatible with
11 + Ufo\DoctrineHelper\Interfaces\IHaveAutoincrementId::getId(): int
12 + ```
13 +
14 + **Причина.** `AutoIncrementIdTrait::getId()` повертає `?int` (до `flush()` ідентифікатора немає), а інтерфейс вимагає `int`.
15 +
16 + **Обхідний шлях.** Не реалізуйте інтерфейс або перевизначте метод у класі — метод класу має пріоритет над методом трейту:
17 +
18 + ```php
19 + #[ORM\Entity]
20 + class Customer implements IHaveAutoincrementId
21 + {
22 + use AutoIncrementIdTrait;
23 +
24 + public function getId(): int
25 + {
26 + return $this->id ?? throw new \LogicException('Customer is not persisted yet.');
27 + }
28 + }
29 + ```

uk/docs/doctrine/doctrine-helper/known_issues/.issues/enum-null-value.md новий файл +11 −0

1 + ### AbstractEnumType не приймає null
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 1.0.0 — 1.1.0 (поточна). Перевірено запуском на PHP 8.4 з DBAL 3.10; DBAL 4 так само передає `null` у тип.
5 + :::
6 +
7 + **Симптом.** Запис `null` у колонку з типом на основі `AbstractEnumType`, навіть з `nullable: true`, завершується `InvalidArgumentException: Invalid 'App\MyEnum' value.` (на PHP 8.1+ перед цим — deprecation `Passing null to parameter #1 ($value)`).
8 +
9 + **Причина.** DBAL викликає `convertToDatabaseValue()` і для `null`, а метод без перевірки передає значення в `$enum::from()`; будь-яка помилка перетворюється на `InvalidArgumentException`. Тип повернення `string|int` не дозволяє виправити це перевизначенням у підкласі.
10 +
11 + **Обхідний шлях.** Для nullable-полів використовуйте замість цього типу вбудований мапінг enum Doctrine ORM — `#[ORM\Column(type: 'string', enumType: MyEnum::class, nullable: true)]` (колонка тоді `VARCHAR`, а не `ENUM`) — або окремий кейс enum на позначення відсутнього значення.

uk/docs/doctrine/doctrine-helper/known_issues/.issues/readme-errors.md новий файл +12 −0

1 + ### Помилки в README пакета
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 1.0.0 — 1.1.0 (поточна). Перевірено за `README.md` і `composer.json` тегу 1.1.0.
5 + :::
6 +
7 + * У прикладі сутності `changeCase()` записує в неіснуючу властивість `$this->type` замість `$this->case`.
8 + * У прикладі `MyEnumType` немає `use Ufo\DoctrineHelper\DBAL\AbstractEnumType;`.
9 + * README описує лише `AbstractEnumType`; трейти, інтерфейси й `Uuid` не згадано.
10 + * Посилання `homepage` у `composer.json` і «Documentations» у README ведуть на `docs.ufo-tech.space`, а не на цей сайт.
11 +
12 + Правильні приклади — на сторінках [PHP enum як ENUM](/docs/doctrine/doctrine-helper/enum_type) і [Ідентифікатори сутностей](/docs/doctrine/doctrine-helper/entity_ids).