【发布时间】:2012-10-23 19:24:39
【问题描述】:
我不知道这是否是一个错误,但我使用的是Doctrine 2.3.0,我发现persist/flush 的行为很奇怪。我有一张基本表:
------------------
| test |
------------------
| id INT | AI |
| field1 VARCHAR |
| field2 VARCHAR |
-----------------
当我通过仅设置field1 创建条目时:
$test = new Entities\test();
$test->setField1('foo');
$em->persist($test);
$em->flush();
Doctrine\DBAL\Logging\EchoSQLLogger 告诉我(通过查看DB 可以确认)Doctrine 执行以下查询:
INSERT INTO test (field1, field2) VALUES (?, ?)
array(2) {
[1]=>
string(3) "foo"
[2]=>
NULL
}
如您所见,虽然我没有设置field2,但Doctrine 确实将它放在插入语句中,并带有NULL 值。
我的所有实体都有这种行为,这是有问题的,因为在执行插入时,我未设置的字段的默认 DB 值被 NULL 覆盖。
这是 Doctrine 的预期默认行为吗,有没有办法将其关闭(即排除我未从 INSERT 语句中设置的字段)?
我可能应该补充一点,我的实体是通过逆向工程自动生成的,并且其中一个字段的声明看起来像这样
/**
* @var string $field2
* // removing nullalble makes no diff.
* @ORM\Column(name="field2", type="string", length=45, nullable=true)
*/
private $field2;
/**
* Set field2
*
* @param string $field2
* @return Test
*/
public function setField2($field2)
{
$this->field2 = $field2;
return $this;
}
【问题讨论】:
标签: doctrine-orm