我不相信教义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;
}
所以,就是这样......不能真正理解为什么会这样。请注意,我之前尝试设置的另一个类有同样的问题(我记得那个)所以我猜我的问题比那个更全局......但如果你们有任何线索,那将非常感激!
答案 0 :(得分:2)
将属性$lastname
公开,并在var_dump
之后使用$contact_store1->setLastname('Barber');
如果它为空,那里会发生一些事情,但我不知道,它可能是什么。