2012-01-16 8 views
12

내가 $ 쿼리가 교리 쿼리 빌더를 사용하여 구축 된 쿼리입니다 다음 코드를 사용하여 교리 기록을 갱신 제출 젠드 양식을 처리하고 업데이트합니다일반 오류 : 교리 2.1 젠드 양식 1366 잘못된 정수 값

$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(); 
     }   
    } 

레코드에 정수가없는 경우, 즉 문자열 만 있으면 위의 내용이 정상적으로 작동합니다. 그러나 doctrine 엔티티에서 정수로 매핑되는 양식에 필드를 포함하면 위의 오류가 발생합니다.

도움을 주시면 감사하겠습니다.

는 UPDATE :

/** 
* @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; 

위의 기업이다. 정수 필드를 업데이트하려고하면 문제가 발생합니다.

답변

29

MySQL을 사용하고 있습니까? 이것은 MySQL이 엄격 모드에서 실행 중이기 때문에 발생할 수 있습니다. 는 데이터베이스가 엄격 모드에 있는지 확인하기 위해 사용하는 어떤 DB 관리자 phpMyAdmin에 또는에서 이러한 쿼리를 실행 :

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

뭔가 당신이 시도하고 실행할 수 STRICT_TRANS_TABLES를 포함 반환하는 경우 :

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

그것은했다 strict_trans_tables를 포함하고 제안이 해제되었습니다. 이것은 실제로 어떤 효과가 있으며, 왜 처음부터 켜져 있었습니까? – Quanano

+0

이것은 매우 정확합니다 : "엄격하지 않은 모드에서 MySQL 서버는 잘못된 입력 값을 가장 가까운 합법적 인 값 (열 정의에서 결정한대로)으로 변환하고 계속 진행합니다. 예를 들어, 음수 값을 UNSIGNED 컬럼 인 경우, MySQL은 이것을 컬럼으로 가장 가까운 합법적 인 값인 0으로 변환합니다. " strict 모드에서는 직접 해당 전환을 건너 뛰고보고있는 오류를 throw합니다. 어쩌면 업데이트하려고하는 엔티티의 매핑과 양식에서 보내고있는 실제 데이터를 게시 할 수 있습니다. – jere