Doctrine 2创建SQLException约束违反“lastname不能为null”但它已设置

时间:2012-05-08 08:54:02

标签: php pdo doctrine-orm

我不相信教义2被打破了,但我实际上找不到一个完美的标题。

所以这就是事情:
我有一个名为“Contact”的实体,它显然是使用Doctrine 2设置的。 到目前为止一切顺利,我能够生成我的数据库,除了在数据库中插入数据之外。我试图设置一些fixtures.php脚本,允许我在每次启动ant脚本时插入数据。

问题是,当我尝试使用save()时,我得到一个PDOException,告诉我有一个db约束违规:

[exec] PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'lastname' cannot be null' in C:\wamp\www\GPos\library\Doctrine\DBAL\Statement.php:131
[exec] Stack trace:
[exec] #0 C:\wamp\www\GPos\library\Doctrine\DBAL\Statement.php(131): PDOStatement->execute(NULL)
[exec] #1 C:\wamp\www\GPos\library\Doctrine\ORM\Persisters\BasicEntityPersister.php(226): Doctrine\DBAL\Statement->execute()
[exec] #2 C:\wamp\www\GPos\library\Doctrine\ORM\UnitOfWork.php(701): Doctrine\ORM\Persisters\BasicEntityPersister->executeInserts()
[exec] #3 C:\wamp\www\GPos\library\Doctrine\ORM\UnitOfWork.php(280): Doctrine\ORM\UnitOfWork->executeInserts(Object(Doctrine\ORM\Mapping\ClassMetadata))
[exec] #4 C:\wamp\www\GPos\library\Doctrine\ORM\EntityManager.php(328): Doctrine\ORM\UnitOfWork->commit()
[exec] #5 C:\wamp\www\GPos\library\GPos\Doctrine\ActiveEntity.php(113): Doctrine\ORM\EntityManager->flush()
[exec] #6 C:\wamp\www\GPos\scripts\fixtures.php(20): GPos_Doctrine_ActiveEntity->save()
[exec] #7 {main}
[exec]   thrown in C:\wamp\www\GPos\library\Doctrine\DBAL\Statement.php online 131

如果我忘记在我的实体上设置'lastname'属性,那可能非常容易调试但事实并非如此:

$contact_store1 = new GPos_Model_Contact();
$contact_store1->setFirstname('');
$contact_store1->setLastname('Barber'); //Yep, it's here!
$contact_store1->setEmail('gho@zgzg.eu');
$contact_store1->setAdress('Grang 2, Jodone');
$contact_store1->setPhone('0032484555555');
$contact_store1->setCellphone('027512121');
$contact_store1->setTva('21651-1684-15151');
$contact_store1->setDiscount(0.00);
$contact_store1->setType('store');
$contact_store1->setStatus('active');
$contact_store1->save(); //line 19

我在ActiveEntity.php中检查了一些回声并设置了......看看我的班级也许这就是一切都出错的地方..:

/**
 * @Entity
 * @Table(name="Contact")
 */
class GPos_Model_Contact extends GPos_Doctrine_ActiveEntity {
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    private $id;
    /** @Column(length=50) */
    private $lastname;
    /** @Column(length=50) */
    private $firstname;
    /** @Column(length=50, nullable=true) */
    private $email;
    /** @Column(length=150, nullable=true) */
    private $adress;
    /** @Column(length=50, nullable=true) */
    private $phone;
    /** @Column(length=50, nullable=true) */
    private $cellphone;
    /** @Column(length=100, nullable=true) */
    private $tva;
    /** @Column(type="decimal", nullable=true) */
    private $discount;

    /**
     * @ManyToOne(targetEntity="GPos_Model_User")
     * @JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
     **/
    private $user;
    /** @Column(name="type", type="string", columnDefinition="enum('client', 'store_admin', 'user', 'store')")  */
    private $type;
    /** @Column(name="status", type="string", columnDefinition="enum('active', 'deleted')")  */
    private $status;
}

所以,就是这样......不能真正理解为什么会这样。请注意,我之前尝试设置的另一个类有同样的问题(我记得那个)所以我猜我的问题比那个更全局......但如果你们有任何线索,那将非常感激!

1 个答案:

答案 0 :(得分:2)

将属性$lastname公开,并在var_dump之后使用$contact_store1->setLastname('Barber');如果它为空,那里会发生一些事情,但我不知道,它可能是什么。