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

时间:2014-07-25 14:07:31

标签: php forms symfony doctrine ipreupdateeventlistener

我有两个实体,名为BookingsRoomsRooms作为集合嵌入到Booking表单中。一切正常。

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

说我在Rooms中定义了两个Booking。我编辑Booking,但对表单进行了零更改,并保存。奇怪 - room_audit表现在有一条记录,说我通过嵌入式表格集等将其值更改为Room个记录之一。但是在保存之前我没有做任何更改。

然后通过反复试验,我确定如果从price嵌入式集合中移除RoomType表单字段,这是currency表单类型,那么此附加审核记录会没出现。如果我将price的字段类型更改为numeric,则会在保存时再次显示。如果我然后将字段类型更改为text,则此附加记录将停止显示。

概要

似乎在嵌入式表单集合中使用numeric字段类型(如货币或数字)会强制触发preUpdate生命周期回调,即使没有更新也没有更改已经成了。将字段类型更改为text,除非表单中的值已更改,否则不会调用preUpdate处理程序。

有谁知道为什么这种行为似乎是基于使用数字表单字段类型?

我在PHP 5.5.9上使用Symfony2.5.2标准版

由于

1 个答案:

答案 0 :(得分:0)

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

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

所以 - 也许你应该查看你的Doctrine2注释,并确保表单字段类型与你的数据库模式匹配。