При использовании Doctrine, как я могу применить ограничение UNIQUE для столбцов в двух разных таблицах?Например, EntityB.some_property
должен быть уникальным для данного EntityA.account_id
?Если бы я делал это без использования Doctrine, я просто скопировал бы account_id
в entity_b
и добавил бы ограничение.Однако с Doctrine это создаст объект Account
в EntityB
, что нежелательно.
entity_a
- id (PK)
- account_id (FK references account.id)
entity_b
- id (PK)
- primary_table_id (FK references entity_a.id)
- some_property (must be unique for a given account_id)
Как видно ниже, мой текущий подход просто создает сущность Account в EntityB, чего я бы не хотелиметь.
<?xml version="1.0" encoding="utf-8"?>
<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://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="NS\App\Entity\EntityA" table="entity_a">
<id name="id" type="integer">
<generator strategy="IDENTITY"/>
</id>
<many-to-one field="account" target-entity="Account" fetch="LAZY">
<join-columns>
<join-column name="account_id" referenced-column-name="id" on-delete="CASCADE" nullable="false"/>
</join-columns>
</many-to-one>
</entity>
</doctrine-mapping>
<?xml version="1.0" encoding="utf-8"?>
<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://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="NS\App\Entity\EntityB" table="entity_b">
<unique-constraints>
<unique-constraint name="uniqueSomeProperty" columns="some_property, account_id_constraint"/>
</unique-constraints>
<id name="id" type="integer">
<generator strategy="IDENTITY"/>
</id>
<field name="someProperty" type="integer" column="some_property"/>
<many-to-one field="accountConstraint" target-entity="Account" fetch="LAZY">
<join-columns>
<join-column name="account_id_constraint" referenced-column-name="id" on-delete="CASCADE" nullable="false"/>
</join-columns>
</many-to-one>
</entity>
</doctrine-mapping>