Ассоциация ManyToOne с ключом ассоциации не работает

Я использую DDD в своем проекте с этими контекстами (я анонимизировал один контекст с помощью Toto):

  • SecurityUser
  • Тото

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашей модели баланса

referenced-column-name = "securityUser"

Я предполагаю, что «securityUser» - это не ваш идентификатор ... имеется в виду настоящее имя столбца в базе данных, обычно называемое «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.

Greco Jonathan 03.07.2018 11:50

На самом деле вы решили мою проблему с `` настоящим именем столбца в базе данных '', на самом деле мой столбец называется user_id в базе данных. большое спасибо !

Greco Jonathan 03.07.2018 11:55

Другие вопросы по теме