1

我并没有那么自大地相信《教义 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

如果我忘记在我的实体上设置“姓氏”属性,那可能很容易调试,但事实并非如此:

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

所以,就是这样......无法真正理解它为什么会发生。请注意,我之前尝试设置的另一个班级也遇到了同样的问题(我只是记得)所以我想我的问题比这更全球化......但如果你们有任何线索,那将不胜感激!

4

1 回答 1

2

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

于 2012-05-08T10:06:57.537 回答