В Symfony, чтобы реализовать отношение (relation) между сущностями (entity) без явных зависимостей, вы можете использовать аннотации или XML/YAML конфигурацию. Давайте посмотрим оба варианта.
Аннотации:
1. Сначала вам нужно создать две сущности, которые вы хотите связать. Допустим, у нас есть сущности User и Address с отношением OneToOne (один-к-одному).
2. В классе User вы можете создать поле, которое будет представлять связь с сущностью Address, и пометить его аннотацией @ORMOneToOne, указав имя связанной сущности:
use DoctrineORMMapping as ORM; /** * @ORMEntity */ class User { // ... /** * @ORMOneToOne(targetEntity="AppEntityAddress") */ private $address; // ... }
3. В классе Address вы также можете создать поле для обратной связи с сущностью User, и также пометить его аннотацией @ORMOneToOne, указав имя связанной сущности и опцию mappedBy, указывающую на поле, которое отвечает за связь с User:
use DoctrineORMMapping as ORM; /** * @ORMEntity */ class Address { // ... /** * @ORMOneToOne(targetEntity="AppEntityUser", mappedBy="address") */ private $user; // ... }
XML/YAML конфигурация:
1. Создайте два файла конфигурации для сущностей User и Address, например, User.orm.xml
и Address.orm.xml
или User.orm.yaml
и Address.orm.yaml
.
2. В файле конфигурации User добавьте следующий код:
<doctrine-mapping> <entity name="AppEntityUser" table="user"> <!-- ... --> <one-to-one field="address" target-entity="AppEntityAddress" inversed-by="user" /> <!-- ... --> </entity> </doctrine-mapping>
3. В файле конфигурации Address добавьте следующий код:
<doctrine-mapping> <entity name="AppEntityAddress" table="address"> <!-- ... --> <one-to-one field="user" target-entity="AppEntityUser" mapped-by="address" /> <!-- ... --> </entity> </doctrine-mapping>
Используя аннотации или XML/YAML конфигурацию, вы можете избежать явных зависимостей между сущностями и все необходимые связи будут автоматически установлены доктриной при сохранении и загрузке данных.