← Актуальні помилки Doctrine Helper
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).