← Актуальні помилки Doctrine Behaviors
docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)
uk/docs/doctrine/doctrine-behaviors/known_issues/open.md
новий файл +17
−0
1
+
# Актуальні помилки Doctrine Behaviors
2
+
3
+
Відомі помилки й обмеження поточної версії `ufo-tech/doctrine-behaviors` (2.0.0): симптом, причина й обхідний шлях. Виправлені — на сторінці [Виправлені помилки](/docs/doctrine/doctrine-behaviors/known_issues/fixed).
4
+
5
+
<include>(.issues/default-connection-only.md)
6
+
7
+
---
8
+
9
+
<include>(.issues/tree-root-nodes.md)
10
+
11
+
---
12
+
13
+
<include>(.issues/translation-locale-length.md)
14
+
15
+
---
16
+
17
+
<include>(.issues/readme-outdated.md)
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/default-connection-only.md
новий файл +24
−0
1
+
### Поведінки працюють лише для з'єднання `default`
2
+
3
+
:::warning subtitle="Актуальна"
4
+
Зачеплені версії: 1.0.0 — 2.0.0 (поточна).
5
+
:::
6
+
7
+
**Симптом.** У застосунку з кількома з'єднаннями Doctrine сутності менеджера, що працює через інше з'єднання, не отримують колонок поведінок і не заповнюються (`createdAt`, `slug`, `translations` тощо).
8
+
9
+
**Причина.** Усі слухачі в `src/EventSubscriber/` зареєстровані атрибутом `#[AsDoctrineListener(..., connection: 'default')]`, тож DoctrineBundle підключає їх лише до менеджера подій з'єднання `default`.
10
+
11
+
**Обхідний шлях.** Зареєструйте потрібні слухачі для свого з'єднання тегом `doctrine.event_listener` з `autoconfigure: false` (щоб атрибут не підключив копію ще й до `default`), напр.:
12
+
13
+
```yaml
14
+
services:
15
+
app.timestampable_reporting:
16
+
class: Ufo\DoctrineBehaviors\EventSubscriber\TimestampableEventSubscriber
17
+
autoconfigure: false
18
+
arguments:
19
+
$timestampableDateFieldType: '%doctrine_behaviors_timestampable_date_field_type%'
20
+
tags:
21
+
- { name: doctrine.event_listener, event: loadClassMetadata, connection: reporting, priority: 500 }
22
+
```
23
+
24
+
`BlameableEventSubscriber` і `SluggableEventSubscriber` (через `DefaultSluggableRepository`) отримують `EntityManagerInterface` у конструкторі — для них також передайте менеджер свого з'єднання (`@doctrine.orm.reporting_entity_manager`). Решта слухачів бере менеджер з аргументів події.
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/tree-root-nodes.md
новий файл +11
−0
1
+
### `getRootNodes()` не знаходить вузли, зроблені коренем через `setChildNodeOf(null)`
2
+
3
+
:::warning subtitle="Актуальна"
4
+
Зачеплені версії: 1.0.0 — 2.0.0 (поточна). Успадковано з KnpLabs/DoctrineBehaviors.
5
+
:::
6
+
7
+
**Симптом.** Вузол, для якого викликали `setChildNodeOf(null)`, `isRootNode()` вважає коренем, але `TreeTrait::getRootNodes()` його не повертає.
8
+
9
+
**Причина.** Новий вузол має `materializedPath = ''`, а `setChildNodeOf(null)` записує `'/'`. `getRootNodesQB()` фільтрує лише `materializedPath = ''`.
10
+
11
+
**Обхідний шлях.** Не викликайте `setChildNodeOf(null)` для коренів або вибирайте корені власним запитом: `->andWhere("t.materializedPath IN ('', '/')")`.
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/translation-locale-length.md
новий файл +30
−0
1
+
### Колонка `locale` перекладу має довжину 5
2
+
3
+
:::warning subtitle="Актуальна"
4
+
Зачеплені версії: 1.0.0 — 2.0.0 (поточна). Успадковано з KnpLabs/DoctrineBehaviors.
5
+
:::
6
+
7
+
**Симптом.** Переклад із локаллю довшою за 5 символів (`sr_Latn`, `zh_Hant`, `de_CH_1996`) не зберігається на СУБД, що перевіряють довжину рядка (MySQL у strict mode, PostgreSQL), — помилка «value too long» / «Data too long».
8
+
9
+
**Причина.** `TranslatableEventSubscriber::mapTranslation()` мапить `locale` як `string` з `length: 5`.
10
+
11
+
**Обхідний шлях.** Бандл не мапить `locale`, якщо поле вже змаплене. Підключіть у сутності перекладу `TranslationMethodsTrait` замість `TranslationTrait` і оголосіть властивості самі:
12
+
13
+
```php
14
+
use Ufo\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
15
+
use Ufo\DoctrineBehaviors\Contract\Entity\TranslationInterface;
16
+
use Ufo\DoctrineBehaviors\Model\Translatable\TranslationMethodsTrait;
17
+
18
+
#[ORM\Entity]
19
+
class CategoryTranslation implements TranslationInterface
20
+
{
21
+
use TranslationMethodsTrait;
22
+
23
+
#[ORM\Column(length: 16)]
24
+
protected ?string $locale = null;
25
+
26
+
protected ?TranslatableInterface $translatable = null;
27
+
28
+
// ...
29
+
}
30
+
```
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/readme-outdated.md
новий файл +12
−0
1
+
### README і docs/ пакета застаріли
2
+
3
+
:::warning subtitle="Актуальна"
4
+
Зачеплені версії: 2.0.0 (поточна). Нестиковка документації, на роботу не впливає.
5
+
:::
6
+
7
+
* `README.md` указує PHP >= 8.2, DBAL ^3.2 | ^4.2, ORM ^3.3, DoctrineBundle ^2.6 — у 2.0.0 це PHP >= 8.4, DBAL ^4.2, ORM ^3.7, DoctrineBundle ^3.0.
8
+
* У переліку поведінок README немає Sluggable і Loggable; Blameable описано як `createdBy` / `updatedBy` без `deletedBy`; Uuid — як «UUID як первинний ключ», хоча `uuid` — окрема колонка.
9
+
* Розділ «Usage» посилається на документацію KnpLabs; `CHANGELOG.md` закінчується на 1.0.0.
10
+
* Приклади в `docs/*.md` здебільшого на анотаціях `@ORM\Entity`, яких немає в Doctrine ORM 3; `translatable.md` посилається на неіснуючий `github.com/Ufo/DoctrineBehaviors`; `tree.md` не згадує, що для `$root[0]` потрібен `ArrayAccess`, а `getTree()` — з `TreeTrait` у репозиторії.
11
+
12
+
Актуальний опис — на цьому сайті.