2012-01-16 8 views
12

Estoy procesando un Formulario de Zend presentado que actualiza un registro Doctrina usando el siguiente código, donde $ consulta es una consulta construida utilizando un generador de consultas doctrina:Error general: 1366 valor entero incorrecto con Doctrina 2.1 y Forma Zend actualizar

$record_array = $query->getResult(); 
$this->_record = $record_array[0]; 
if($this->getRequest()->isPost()) 
    { 
     if ($this->_form->isValid($this->_request->getPost())) 
     { 
      $newEntity = $this->_form->update($this->_record); 
      $this->_em->flush(); 
      $this->view->success = 'Record Saved.'; 
     } else { 
      $this->view->errors = $this->_form->getErrors(); 
     }   
    } 

Lo anterior funciona bien si no hay enteros en el registro, es decir, solo cadenas. Sin embargo, obtengo el error anterior si incluyo campos en el formulario que están mapeados como enteros en la entidad de doctrina.

Cualquier ayuda sería apreciada.

ACTUALIZACIÓN:

/** 
* @var integer $solicitorid 
* 
* @Column(name="SolicitorID", type="integer", nullable=false) 
* @Id 
* @GeneratedValue(strategy="IDENTITY") 
*/ 
private $solicitorid; 

/** 
* @var string $solicitor 
* 
* @Column(name="Solicitor", type="string", length=160, nullable=true) 
*/ 
private $solicitor; 

/** 
* @var string $address 
* 
* @Column(name="Address", type="string", length=160, nullable=true) 
*/ 
private $address; 

/** 
* @var string $town 
* 
* @Column(name="Town", type="string", length=100, nullable=true) 
*/ 
private $town; 

/** 
* @var string $county 
* 
* @Column(name="County", type="string", length=100, nullable=true) 
*/ 
private $county; 

/** 
* @var string $postcode 
* 
* @Column(name="Postcode", type="string", length=100, nullable=true) 
*/ 
private $postcode; 

/** 
* @var string $dxaddress 
* 
* @Column(name="DXAddress", type="string", length=150, nullable=true) 
*/ 
private $dxaddress; 

/** 
* @var string $phone 
* 
* @Column(name="phone", type="string", length=30, nullable=true) 
*/ 
private $phone; 

/** 
* @var string $fax 
* 
* @Column(name="fax", type="string", length=30, nullable=true) 
*/ 
private $fax; 

/** 
* @var string $email 
* 
* @Column(name="email", type="string", length=255, nullable=true) 
*/ 
private $email; 

/** 
* @var string $password 
* 
* @Column(name="password", type="string", length=30, nullable=false) 
*/ 
private $password; 

/** 
* @var integer $leadStatus 
* 
* @Column(name="lead_status", type="integer", nullable=true) 
*/ 
private $leadStatus; 

/** 
* @var string $termsref 
* 
* @Column(name="termsRef", type="string", length=10, nullable=true) 
*/ 
private $termsref; 

/** 
* @var integer $termsconditions 
* 
* @Column(name="termsconditions", type="integer", nullable=true) 
*/ 
private $termsconditions; 

/** 
* @var date $termssent 
* 
* @Column(name="termsSent", type="date", nullable=true) 
*/ 
private $termssent; 

/** 
* @var date $termssigneddate 
* 
* @Column(name="termssigneddate", type="date", nullable=true) 
*/ 
private $termssigneddate; 

/** 
* @var integer $paymentterms 
* 
* @Column(name="paymentterms", type="integer", nullable=true) 
*/ 
private $paymentterms; 

/** 
* @var integer $discountterms 
* 
* @Column(name="discountterms", type="integer", nullable=true) 
*/ 
private $discountterms; 

/** 
* @var float $discountrate 
* 
* @Column(name="discountrate", type="float", nullable=true) 
*/ 
private $discountrate; 

/** 
* @var integer $accountscontact 
* 
* @Column(name="AccountsContact", type="integer", nullable=true) 
*/ 
private $accountscontact; 

/** 
* @var date $warned 
* 
* @Column(name="warned", type="date", nullable=true) 
*/ 
private $warned; 

/** 
* @var float $feerate 
* 
* @Column(name="FeeRate", type="float", nullable=true) 
*/ 
private $feerate; 

/** 
* @var string $labourrate 
* 
* @Column(name="LabourRate", type="string", length=100, nullable=true) 
*/ 
private $labourrate; 

/** 
* @var text $specialinst 
* 
* @Column(name="SpecialInst", type="text", nullable=true) 
*/ 
private $specialinst; 

/** 
* @var text $reportinst 
* 
* @Column(name="ReportInst", type="text", nullable=true) 
*/ 
private $reportinst; 

/** 
* @var boolean $autostatement 
* 
* @Column(name="AutoStatement", type="boolean", nullable=true) 
*/ 
private $autostatement; 

/** 
* @var datetime $lastmodifed 
* 
* @Column(name="lastModifed", type="datetime", nullable=false) 
*/ 
private $lastmodifed; 

anterior es la entidad. El problema surge cuando intento actualizar un campo entero.

Respuesta

29

¿Está utilizando MySQL? esto puede suceder porque MySQL se ejecuta en modo estricto. ejecutar estas consultas de phpMyAdmin o lo que sea administrador del DB que está utilizando para comprobar si la base de datos está en modo estricto:

SELECT @@GLOBAL.sql_mode; 
SELECT @@SESSION.sql_mode; 

si devuelve algo que contenga STRICT_TRANS_TABLES usted podría tratar de correr:

SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 
+0

Se hizo contiene el strict_trans_tables, y su sugerencia lo desactivó. ¿Qué efecto tiene esto realmente, por qué debería haber estado en primer lugar? – Quanano

+0

esto es bastante preciso: "En modo no estricto, el servidor MySQL convierte valores de entrada erróneos a los valores legales más cercanos (según lo determinado por las definiciones de columnas) y continúa su camino. Por ejemplo, si intenta almacenar un valor negativo en una columna NO FIRMADA, MySQL lo convierte en cero, que es el valor legal más cercano para la columna ". en modo estricto saltará directamente esas conversiones y arrojará ese error que está viendo. tal vez pueda publicar el mapeo de la entidad que está tratando de actualizar, y los datos reales que le está enviando en su forma – jere

Cuestiones relacionadas