我有两个实体,名为Bookings
和Rooms
。 Rooms
作为集合嵌入到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标准版
由于
答案 0 :(得分:0)
在处理包含文本字段的实体的表单集合时,我遇到了类似的问题。如果我加载了要编辑的表单 - 但没有进行任何更改 - 它仍会为集合中的所有实体安排更新。
我发现在我的Doctrine2注释中 - 在定义实体时 - 该属性被声明为整数 - 而不是varchar。当我将表单字段更改为整数时 - 表单处理程序不再尝试更新集合中的所有实体。
所以 - 也许你应该查看你的Doctrine2注释,并确保表单字段类型与你的数据库模式匹配。