zf2 + Doctrine2完整性约束违规:1048列''不能为空

时间:2015-04-10 03:00:06

标签: doctrine-orm zend-framework2 constraints integrity

我对Doctrine2有一个问题,它抛出了我这个例外:

An exception occurred while executing 'INSERT INTO sesion (Contrasena, Estado, UsuarioIdentificacion) VALUES (?, ?, ?)' with params ["j15474874654j", "1", null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'UsuarioIdentificacion' cannot be null

我是学说2的初学者,我无法解决这个错误,我认为错误存在于关系中。我已经读过其他类似的问题,但我还没有成功。 我非常感谢你的帮助。这是我的代码:

在我的控制器中:

            $usuario = new Usuario();
            $data = $request->getPost();
            $usuario->setNombre($data['nombre']);
            $usuario->setApellidos($data['apellidos']);
            $usuario->setIdentificacion($data['identificacion']);                  
            $usuario->setTitulo($data['titulo']);
            $usuario->setContacto($data['contacto']);
            $usuario->setCorreo($data['correo'] . "@correounivalle.edu.co");                   


            $sesion = new Sesion(); 
            $sesion->setUsuarioidentificacion($usuario);

            $sesion->setEstado("1");
            $sesion->setContrasena($data['nombre'][0].$data['identificacion'].$data['apellidos'][0]);


            $em->persist($usuario);
            $em->persist($sesion);
            $em->flush();

类usuario:

<?php
namespace DBAL\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * Usuario
 *
 * @ORM\Table(name="usuario", uniqueConstraints={@ORM\UniqueConstraint(name="Identificacion", columns={"Identificacion"}), @ORM\UniqueConstraint(name="Correo", columns={"Correo"})})
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="DBAL\Repository\UsuarioRepository")
 */
class Usuario
{
    /**
     * @var integer
     *
     * @ORM\Column(name="Id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

/**
 * @var integer
 *
 * @ORM\Column(name="Identificacion", type="integer", nullable=false)
 */
private $identificacion;

/**
 * @var string
 *
 * @ORM\Column(name="Nombre", type="string", length=50, nullable=false)
 */
private $nombre;

/**
 * @var string
 *
 * @ORM\Column(name="Apellidos", type="string", length=50, nullable=false)
 */
private $apellidos;

/**
 * @var string
 *
 * @ORM\Column(name="Correo", type="string", length=100, nullable=false)
 */
private $correo;

/**
 * @var integer
 *
 * @ORM\Column(name="Contacto", type="integer", nullable=true)
 */
private $contacto;

/**
 * @var string
 *
 * @ORM\Column(name="Titulo", type="string", length=20, nullable=true)
 */
private $titulo;



/*with their respective setter and getter*/

class sesion:

<?php
namespace DBAL\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Sesion
 *
 * @ORM\Table(name="sesion", indexes={@ORM\Index(name="UsuarioIdentificacion", columns={"UsuarioIdentificacion"}), @ORM\Index(name="sesion", columns={"UsuarioIdentificacion"})})
 * @ORM\Entity
 */
class Sesion
{
    /**
     * @var integer
     *
     * @ORM\Column(name="Id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
    /**
     * @var string
     *
     * @ORM\Column(name="Contrasena", type="string", length=50, nullable=false)
     */
    private $contrasena;

    /**
     * @var boolean
     *
     * @ORM\Column(name="Estado", type="boolean", nullable=false)
     */
    private $estado;

    /**
     * @var \Usuario
     *
     * 
     * @ORM\OneToOne(targetEntity="Usuario")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="UsuarioIdentificacion", referencedColumnName="Correo")
     * })
     */
    private $usuarioidentificacion;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Roles", mappedBy="sesionusuarioidentificacion")
     */
    private $rolesid;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->rolesid = new \Doctrine\Common\Collections\ArrayCollection();
    }


    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }


    /**
     * Set contrasena
     *
     * @param string $contrasena
     *
     * @return Sesion
     */
    public function setContrasena($contrasena)
    {
        $this->contrasena = $contrasena;

        return $this;
    }

    /**
     * Get contrasena
     *
     * @return string
     */
    public function getContrasena()
    {
        return $this->contrasena;
    }

    /**
     * Set estado
     *
     * @param boolean $estado
     *
     * @return Sesion
     */
    public function setEstado($estado)
    {
        $this->estado = $estado;

        return $this;
    }

    /**
     * Get estado
     *
     * @return boolean
     */
    public function getEstado()
    {
        return $this->estado;
    }

    /**
     * Set usuarioidentificacion
     *
     * @param \DBAL\Entity\Usuario $usuarioidentificacion
     *
     * @return Sesion
     */
    public function setUsuarioidentificacion(\DBAL\Entity\Usuario $usuarioidentificacion)
    {
        $this->usuarioidentificacion = $usuarioidentificacion;

        return $this;
    }

    /**
     * Get usuarioidentificacion
     *
     * @return \Usuario
     */
    public function getUsuarioidentificacion()
    {
        return $this->usuarioidentificacion;
    }

    /**
     * Add rolesid
     *
     * @param \Roles $rolesid
     *
     * @return Sesion
     */
    public function addRolesid(\Roles $rolesid)
    {
        $this->rolesid[] = $rolesid;

        return $this;
    }

    /**
     * Remove rolesid
     *
     * @param \Roles $rolesid
     */
    public function removeRolesid(\Roles $rolesid)
    {
        $this->rolesid->removeElement($rolesid);
    }

    /**
     * Get rolesid
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getRolesid()
    {
        return $this->rolesid;
    }

如果有人可以帮助我,我真的需要它,我已经搜索了很多并尝试了很多方面,但实际上并没有解决它。

1 个答案:

答案 0 :(得分:0)

añadeestoen la clase session:

function __construct($usuarioidentificacion)
    {
        $this->usuarioidentificacion=$usuarioidentificacion;
    }

En el controlador:

$usuario = new Usuario();
            $data = $request->getPost();
            $usuario->setNombre($data['nombre']);
            $usuario->setApellidos($data['apellidos']);
            $usuario->setIdentificacion($data['identificacion']);                  
            $usuario->setTitulo($data['titulo']);
            $usuario->setContacto($data['contacto']);
            $usuario->setCorreo($data['correo'] . "@correounivalle.edu.co");  

 $em->persist($usuario);
 $em->flush();
$usuario=$this->getEntityManager()->getRepository('Application\Entity\Usuario'')->findBy(array('identificacion'=>$data['identificacion']))

$sesion = new Sesion($usuario);
$sesion->setUsuarioidentificacion($usuario);

            $sesion->setEstado("1");
            $sesion->setContrasena($data['nombre'][0].$data['identificacion'].$data['apellidos'][0]);
            $em->persist($sesion);
            $em->flush(); 

El tema es que en la clase sesion te hace falta el constructor con la id del usuario。

不,他没有任何事情,也不会犹豫不决,不可饶恕哈利亚。

PD:el tema de hacer primero el persist del userydespuésbuscarlo,lo puedes hacer como quieres。

Espero que esto te ayude,yameirás。