Tengo una entidad Item
que tiene una relación ManyToOne
con una entidad Category
. Quiero que se unan a un campo que no sea id
de Categoría (en este caso, un campo llamado id2
). Mi esquema se detalla a continuación.¿Es posible hacer referencia a una columna que no sea 'id' para JoinColumn?
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;
Cuando trato de guardar un Item
consigo este error:
Notice: Undefined index: id2 in vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 511
Efectivamente, si cambio id2
-id
en el JoinColumn
anotación, todo funciona bien, pero necesito las entidades a ser conectado a través de id2
. es posible?
Editar
Lo que quiero lograr es imposible de acuerdo a la doctrina oficial 2 docs.
It is not possible to use join columns pointing to non-primary keys. Doctrine will think these are the primary keys and create lazy-loading proxies with the data, which can lead to unexpected results. Doctrine can for performance reasons not validate the correctness of this settings at runtime but only through the Validate Schema command.
fuente: http://www.doctrine-project.org/docs/orm/2.1/en/reference/limitations-and-known-issues.html
Gracias por la respuesta. Traté de cambiar el tipo de campo a entero, y agregué @Index, pero todavía no funciona. –
¡Bah! Parece que necesitan ser fk después de todo. Siempre hay muchos a muchos como una opción. – quickshiftin