1

Doctrine 2が壊れていると信じるのはそれほど気難しいことではありませんが、私の場合にぴったりのタイトルを実際に見つけることはできませんでした。

つまり、
「Contact」という名前のエンティティがあり、Doctrine 2を使用して設定されていることは明らかです。これまでのところ、データベースを生成できますが、データベースにデータを挿入する場合を除きます。antスクリプトを起動するたびにデータを挿入できるfixtures.phpスクリプトを設定しようとしました。

問題は、save()を使用しようとすると、db制約違反があることを通知するPDOExceptionが発生することです。

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

だから、これはそれです...なぜそれが起こっているのか本当に理解できません。以前に設定しようとしていた別のクラスで同じ問題が発生したことに注意してください(覚えています)ので、私の問題はそれよりもグローバルだと思います...しかし、何か手がかりがあれば、それは大いにありがたいです!

4

1 に答える 1

2

プロパティを$lastname公開し、nullの場合は後で使用var_dump$contact_store1->setLastname('Barber');ます。そこで何かが起こっていますが、それが何であるかはわかりません。

于 2012-05-08T10:06:57.537 に答える