常规错误:1366 Doctrine 2.1和Zend Form更新时的整数值不正确

Qua*_*ano 12 php mysql zend-framework zend-form doctrine-orm

我正在处理提交的Zend表单,该表单使用以下代码更新Doctrine Record,其中$ query是使用doctrine查询构建器构建的查询:

$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();
        }        
    }
Run Code Online (Sandbox Code Playgroud)

如果记录中没有整数,则上述工作正常,即只有字符串.但是,如果我在表单中包含在doctrine实体中映射为整数的字段,我会得到上面的错误.

任何帮助,将不胜感激.

更新:

/**
 * @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;
Run Code Online (Sandbox Code Playgroud)

以上是实体.当我尝试更新整数字段时出现问题.

jer*_*ere 31

你在用MySQL吗?这可能是因为MySQL在严格模式下运行.从phpMyAdmin或您正在使用的任何数据库管理员运行这些查询来检查数据库是否处于严格模式:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Run Code Online (Sandbox Code Playgroud)

如果它返回包含STRICT_TRANS_TABLES你可以尝试运行的东西:

SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Run Code Online (Sandbox Code Playgroud)