Donde un usuario puede tener solo un perfil.
Pero un perfil puede tener muchos Usuarios asociados.
USUARIOS
Código SQL:
PERFILESVer original
CREATE TABLE `usuarios` ( `usuario` VARCHAR(30) NOT NULL DEFAULT '', `correo` VARCHAR(210) NOT NULL, `nombre_usuario` VARCHAR(50) NOT NULL, `clave` VARCHAR(50) NOT NULL, `id_perfil` INT(50) NOT NULL, PRIMARY KEY (`usuario`), INDEX `FK_usuarios_perfiles` (`id_perfil`), CONSTRAINT `FK_usuarios_perfiles` FOREIGN KEY (`id_perfil`) REFERENCES `perfiles` (`id_perfil`) ON UPDATE CASCADE ) COMMENT='Modulo Autenticacion' COLLATE='utf8_general_ci' ENGINE=InnoDB;
Código SQL:
Ver original
CREATE TABLE `perfiles` ( `id_perfil` INT(10) NOT NULL AUTO_INCREMENT, `perfil` VARCHAR(50) NOT NULL, PRIMARY KEY (`id_perfil`), UNIQUE INDEX `perfil` (`perfil`) ) COMMENT='Modulo Autenticacion\r\n' COLLATE='utf8_general_ci' ENGINE=InnoDB
Luego tengo las Entidades
Código PHP:
Ver original
/** * @Entity * @Table(name="perfiles") **/ class Perfil { /** * @Id * @GeneratedValue (strategy="AUTO") * @Column(type="integer", name="id_perfil") **/ protected $id; /** @Column(type="string", length=50) **/ protected $perfil; /** * @OneToMany(targetEntity="Usuario", mappedBy="perfil", cascade={"persist"}) */ protected $usuarios; public function __construct() { $this->usuarios = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Agrego un Usuario al Perfil. * @param \modulos\acceso\models\Usuario $usuario */ public function addUsuario(Usuario $usuario) { $this->usuarios[] = $usuario; }
Código PHP:
Cada clase con sus setters y getters.Ver original
/** * @Entity * @Table(name="usuarios") **/ class Usuario { /** * @Id * @Column(type="string", length=30) **/ protected $usuario; /** * @Column(type="string", length=210) **/ protected $correo; /** * @Column(type="string", length=50, name="nombre_usuario") **/ protected $nombre; /** * @Column(type="string", length=50) **/ protected $clave; /** * @OneToOne(targetEntity="Perfil", inversedBy="usuarios", fetch="EAGER") * @JoinColumn(name="id_perfil", referencedColumnName="id_perfil") */ protected $perfil; public function __construct() { $this->perfil = New \Doctrine\Common\Collections\ArrayCollection(); }
La situacion es que Eliminar y Crear un nuevo Usuario lo realiza bien, el problema es cuando tengo que actualizar un nuevo usuario, me da el siguiente error:
Código PHP:
Se supone que es un error en el mapeo de las entidades, pero he probado varias posibilidades y nada.Ver original
Mensaje : A new entity was found through the relationship 'modulos\acceso\models\Usuario#perfil' that was not configured to cascade persist operations for entity: modulos\acceso\models\Perfil@00000000404b9edd000000004c14202d. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'modulos\acceso\models\Perfil#__toString()' to get a clue.
La pregunta es como seria el codigo correcto para actualizar con Doctrine o si, es solo error de mapeo.
Gracias