BXVoral
@BXVoral
Веб-разработка

Symfony Doctrine XML Mapping Ошибка при попытке описать embeddable поле. Как исправить?

Описываю сущность. Среди прочего у сущности есть поле ValueObject. Классы сделал теперь составляю xml (в листинге оставляю только значимые поля):
файл src/Api/Infrastructure/Database/Orm/DocumentAttribute.orm.xml
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="App\Api\Domain\Entity\Order" table="api_order">
        <embedded name="test" class="App\Api\Domain\Entity\ValueObject\DocumentAttribute"/>
    </entity>
</doctrine-mapping>

файл src/Api/Infrastructure/Database/Orm/Order.orm.xml
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <embeddable name="\App\Api\Domain\Entity\ValueObject\DocumentAttribute">
        <field name="number"/>
        <field name="date" type="date"/>
    </embeddable>
</doctrine-mapping>


При попытке создать новую миграцию ( console d:m:diff)

выдает ошибку

[critical] Error thrown while running command "'d:m:diff'". Message: "No mapping file found named 'DocumentAttribute.orm.xml' for class 'App\Api\Domain\Entity\ValueObject\DocumentAttribute'."


PHP8.1
Symfony 6
Doctrine 2.13.1
  • Вопрос задан
  • 324 просмотра
Решения вопроса 1
BXVoral
@BXVoral Автор вопроса
Веб-разработка
Разобрался с ситуацией.

Классы описывающие Entity и ValueObject находятся в разных неймспейсах и, соответственно, каталогах. В doctrine.yaml mapping был настроен только на один из этих каталогов. Настроил этот раздел каталога и все заработало

т.е. конфиг стал выглядеть таким образом:
orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            Api:
                is_bundle: false
                type: xml
                dir: '%kernel.project_dir%/src/Api/Infrastructure/Database/Orm'
                prefix: 'App\Api\Domain\Entity'
                alias: Api
            ValueObject:
                is_bundle: false
                type: xml
                dir: '%kernel.project_dir%/src/Api/Infrastructure/Database/ValueObject'
                prefix: 'App\Api\Domain\ValueObject'
                alias: ValueObject
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы