Установить имя @JoinColumn в доктрине - PullRequest
0 голосов
/ 28 сентября 2019

В проекте, над которым я работаю, мы используем доктрину только как ORM, что означает, что мы не используем миграции доктрин.Я пытаюсь сопоставить столбец (из существующей таблицы), который имеет ассоциацию OneToMany, например:

    /**
     * @var InternalUser
     * @ORM\ManyToOne(targetEntity="App\Entity\InternalUser", inversedBy="blocos")
     * @ORM\JoinColumn(nullable=false, name="owner")
     */
    private $owner;

Проблема в том, что имя столбца имеет значение только owner, а не owner_id, но при запросебаза данных, используя, например, ->find('id'), доктрина добавляет суффикс _id к имени столбца, генерируя запрос, который выглядит следующим образом:

SELECT .... t0.owner_id AS owner_id_6 FROM ... 

И когда запрос выполняется, я получаю Undefined column: 7 ERROR: column t0.owner_id does not existпотому что правильное имя просто «владелец».

Я пытался установить name и referencedColumnName в "owner" в аннотации @JoinColumn, но в любом случае он добавляет суффикс _id.

Я также рассмотрел стратегий именования , но, похоже, он не отвечает за суффикс _id (я использую UnderscoreNamingStrategy по умолчанию, поставляемый с symfony4)

Есть ли способ настроить доктрину для , а не добавить суффикс '_id'?

PS: изменение имени столбца недоступно

Спасибо

1 Ответ

0 голосов
/ 30 сентября 2019

name именно для этого, когда вы используете его, доктрина должна отображаться правильно.

Теперь, что кажется неловким, так это то, что вы упомянули ->find('id').

Если выесть таблица A , и вы хотите посмотреть что-то на основе id этой таблицы, когда вы используете ->find($id), он будет искать идентификатор этой таблицы.

НоВы говорите об отношении, и в этом случае вы должны использовать findBy(['field' => $value]) или findOneBy(['field' => $value]).

Мне нужна эта помощь, если нет, можете ли вы показать точный запрос, который вы используете, и обе стороны отношения

...