Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2-表单集合中的数字字段触发数据库更新_Php_Forms_Symfony_Doctrine_Ipreupdateeventlistener - Fatal编程技术网

Php Symfony2-表单集合中的数字字段触发数据库更新

Php Symfony2-表单集合中的数字字段触发数据库更新,php,forms,symfony,doctrine,ipreupdateeventlistener,Php,Forms,Symfony,Doctrine,Ipreupdateeventlistener,我有两个实体,叫做预订和房间。房间作为集合嵌入到预订表单中。一切正常 然后,我将SimpleThings/EntityAuditBundle安装到记录的版本更改中。这一切都很好,正如预期的一样,除了一件事 假设我预订了两个房间。我编辑了预订,但没有对表单进行任何更改,并将其保存。奇怪-room_audit表现在有一条记录说我通过嵌入的表单集合等将其值更改为一条room记录,但在保存之前我没有做任何更改 然后通过反复试验,我确定如果我从RoomType embedded集合(货币表单类型)中删除p

我有两个实体,叫做预订和房间。房间作为集合嵌入到预订表单中。一切正常

然后,我将SimpleThings/EntityAuditBundle安装到记录的版本更改中。这一切都很好,正如预期的一样,除了一件事

假设我预订了两个房间。我编辑了预订,但没有对表单进行任何更改,并将其保存。奇怪-room_audit表现在有一条记录说我通过嵌入的表单集合等将其值更改为一条room记录,但在保存之前我没有做任何更改

然后通过反复试验,我确定如果我从RoomType embedded集合(货币表单类型)中删除price form字段,则不会显示此附加审核记录。如果我将price字段类型更改为numeric,则在保存时它会再次出现。如果我随后将字段类型更改为文本,则此附加记录将停止显示

总结

似乎在嵌入式表单集合中使用数字字段类型(如货币或数字)会强制触发更新前生命周期回调,即使在没有任何要更新的内容时也是如此,因为没有进行任何更改。将字段类型更改为text,则不会调用preUpdate处理程序,除非表单中的值发生更改

有人知道为什么这种行为似乎是基于使用数字形式的字段类型吗

我在MySQL上使用Symfony2.5.2标准版和PHP5.5.9


谢谢

在处理包含文本字段的实体表单集合时,我遇到了一个非常类似的问题。如果我加载了要编辑的表单,但没有进行任何更改,它仍然会为集合中的所有实体安排更新

我发现在我的Doctrine2注释中——定义实体时——属性被声明为整数——而不是varchar。当我将表单字段更改为整数时,表单处理程序不再尝试更新集合中的所有实体

因此-也许您应该查看Doctrine2注释,并确保表单字段类型与数据库模式匹配