Я использую DDD в своем проекте с этими контекстами (я анонимизировал один контекст с помощью Toto):
My Toto Context имеет систему баланса (валютные дебеты и кредиты) В Toto у меня есть таблица TotoUser, которая ссылается на связанный ключ securityUser следующим образом:
<?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 http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name = "App\Domain\Toto\TotoUser\Entity\TotoUser" table = "dol_toto_users">
<id name = "securityUser" association-key = "true"/>
<one-to-one field = "securityUser" target-entity = "App\Domain\UAC\User\Entity\User">
<join-columns>
<join-column name = "user_id"/>
</join-columns>
</one-to-one>
<one-to-many field = "transactions" target-entity = "App\Domain\Toto\TotoUser\Entity\Balance" mapped-by = "user">
<order-by>
<order-by-field name = "date" direction = "DESC"/>
</order-by>
<cascade>
<cascade-remove/>
<cascade-persist/>
</cascade>
</one-to-many>
<field name = "currentCurrency" type = "float">
<options>
<option name = "comment">Current amount of currency owned by the user</option>
</options>
</field>
</entity>
</doctrine-mapping>
В этой таблице TotoUser у меня есть набор транзакций, каждая транзакция представляет собой запись баланса (по дебету или кредиту)
В моей таблице баланса есть это отображение
<?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 http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity repository-class = "App\Api\Template\Repository\BalanceRepository" name = "App\Domain\Toto\TotoUser\Entity\Balance" table = "dol_balance">
<id name = "id" type = "integer" column = "id">
<generator strategy = "IDENTITY"/>
</id>
<field name = "amount" type = "decimal" column = "amount" precision = "15" scale = "2" nullable = "false"/>
<field name = "date" type = "datetime" column = "date" precision = "0" scale = "0" nullable = "false"/>
<many-to-one field = "user" target-entity = "App\Domain\Toto\TotoUser\Entity\TotoUser" inversed-by = "transactions">
<join-column name = "user_id" referenced-column-name = "securityUser"/>
</many-to-one>
<many-to-one field = "type" target-entity = "App\Domain\Toto\Template\Entity\Type"/>
</entity>
</doctrine-mapping>
Но это сопоставление неверно, кажется, что мы не можем присоединиться к столбцу по связанному ключу на стороне-владельце.
Мои ошибки:
Cannot find a field on 'App\Domain\Toto\TotoUser\Entity\TotoUser' that is mapped to column 'id'. Either the field does not exist or an association exists but it has multiple join columns.
И еще одна доктрина: schema: validate:
[FAIL] The entity-class App\Domain\Toto\TotoUser\Entity\Balance mapping is invalid: * The referenced column name 'id' has to be a primary key column on the target entity class 'App\Domain\Toto\TotoUser\Entity\TotoUser'.
Есть идеи, как это решить?
Обновлено: Решение простое: просто введите referenced-column-name фактическое имя вашего идентификатора в БД ... вот user_id






В вашей модели баланса
referenced-column-name = "securityUser"
Я предполагаю, что «securityUser» - это не ваш идентификатор ... имеется в виду настоящее имя столбца в базе данных, обычно называемое «id»
На самом деле вы решили мою проблему с `` настоящим именем столбца в базе данных '', на самом деле мой столбец называется user_id в базе данных. большое спасибо !
Я уже пробовал "id" и "securityUser" тот же результат, проблема, похоже, не связана с этим. Ошибка, которую я получаю от securityUser, выглядит следующим образом:
Column name `securityUser` referenced for relation from App\Domain\Toto\TotoUser\Entity\Balance towards App\Domain\Toto\TotoUser\E ntity\TotoUser does not exist.