У меня есть сущность Item
, которая имеет отношение ManyToOne
к сущности Category
.Я хочу, чтобы к ним присоединилось поле, отличное от id
категории (в данном случае поле с именем id2
). Моя схема указана ниже.
class Item {
/**
* @ORM\Id
* @ORM\Column(name = "id", type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity = "Category")
* @ORM\JoinColumn(name = "category_id", referencedColumnName = "id2")
*/
protected $category;
}
class Category {
/**
* @ORM\Id
* @ORM\Column(name = "id", type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
/**
* @ORM\Column(name = "id2", type = "string", length = "255", unique = "true")
*/
protected $id2;
Когда я пытаюсь сохранить элемент
, я получаю следующую ошибку:
Примечание: неопределенный индекс: id2 в vendor / doctrine / lib / Doctrine / ORM / Persisters / BasicEntityPersister.php, строка 511
Конечно, если я изменю id2
на id
в аннотации JoinColumn
, все будет работать нормально, но мне нужно, чтобы объекты были подключены через id2
. Возможно ли это?
Edit
То, что я хочу достичь, невозможно согласно официальной документации Doctrine 2.
Невозможно использовать столбцы соединения, указывающие на непервичные ключи. Doctrine будет думать, что это первичные ключи, и создаст ленивую загрузку. прокси с данными, что может привести к неожиданным результатам. Доктрина может по причинам производительности не подтверждать правильность этого настройки во время выполнения, но только с помощью команды Проверить схему.