Hola, como estan todos, la idea es que tengo en mi base una tabla usuarios y otra perfiles.
Donde un usuario puede tener solo un perfil.
Pero un perfil puede tener muchos Usuarios asociados.
USUARIOS
Código SQL:
Ver originalCREATE 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;
PERFILES
Código SQL:
Ver originalCREATE 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:
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();
}
Cada clase con sus setters y getters.
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:
Ver originalMensaje : 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.
Se supone que es un error en el mapeo de las entidades, pero he probado varias posibilidades y nada.
La pregunta es como seria el codigo correcto para actualizar con Doctrine o si, es solo error de mapeo.
Gracias