yii2 验证相关模型
yii2 validate related models
我们有 2 个模型:
- 订单
- 订单商品
所以在保存相关的OrderItems 时我需要检查父Order 的一些属性。
Order 有属性:"time_begin" 和 "time_end",OrderItem 有自己的 "time_begin" 和 "time_end"。所以规则是OrderItem的时间必须在父Order的时间之间。
比如我有以下情况:
- 用户将 Order 的 "time_end" 更改为更大的值,并将 OrderItem 的 "time_end" 也更改为更大的值
- 尝试保存所有相关数据(订单及其所有项目)
- 订单验证成功通过
- 但是当 OrderItem 试图验证其 "time_end" 时,它采用旧的 Order->time_end 属性 值并给出验证错误!!!
有解决办法吗???
如何让OrderItem知道Order已经改变了?
这个问题比较复杂,你可以这样考虑:
- 不要同时调用 Order::validate() 和 OrderItems::validate()。
- Order::validate() -> Order::save() 先于 OrderItems::validate() -> OrderItems::save() (这是否失败,如果需要记得恢复顺序)
我们有 2 个模型:
- 订单
- 订单商品
所以在保存相关的OrderItems 时我需要检查父Order 的一些属性。
Order 有属性:"time_begin" 和 "time_end",OrderItem 有自己的 "time_begin" 和 "time_end"。所以规则是OrderItem的时间必须在父Order的时间之间。
比如我有以下情况:
- 用户将 Order 的 "time_end" 更改为更大的值,并将 OrderItem 的 "time_end" 也更改为更大的值
- 尝试保存所有相关数据(订单及其所有项目)
- 订单验证成功通过
- 但是当 OrderItem 试图验证其 "time_end" 时,它采用旧的 Order->time_end 属性 值并给出验证错误!!!
有解决办法吗??? 如何让OrderItem知道Order已经改变了?
这个问题比较复杂,你可以这样考虑: - 不要同时调用 Order::validate() 和 OrderItems::validate()。 - Order::validate() -> Order::save() 先于 OrderItems::validate() -> OrderItems::save() (这是否失败,如果需要记得恢复顺序)