我正在構建一個應用程序,用戶可以在其中編輯一些數據,然後顯示一個可以確認(並評論)其編輯的屏幕。Symfony 2/Doctrine 2:獲取對PersistentCollection的更改
在確認表單中,我顯示對實體所做的更改。這適用於「正常」字段。下面是一些代碼,用於檢查單場工程:
// create $form
// bind $form
if ($form->isValid() {
$data = $form->getData();
// example, get changes of a "normal" field
if ($data['color'] != $entity->getColor()) {
// do something with changes
}
}
但我不能做同樣的關係(與用戶例如多對多):
if ($data['users'] != $entity->getUsers()
不會因爲$工作data ['users']和$ entity-> getUsers()引用相同的持久集合。可以調用此函數來查看是否有變化:
if ($data['users']->isDirty())
但是不可能看到做了哪些更改。
上面的第二個問題是,如果從持久集合中刪除所有項目,Doctrine不會將其標記爲「已更改」(isDirty()= true),所以我無法捕捉到具體更改用戶從表單中的實體中刪除所有「用戶」。
請注意,代碼全部有效,唯一的問題是我無法查看/處理在確認步驟中所做的更改。
檢索$ entity-> getUsers()之前綁定?同時檢查並查看您的表單類型是否通過引用添加字段。 – Lighthart 2013-02-12 07:39:31
@Lighthart這是一個好主意(參考)!將檢查並取回給你... – mogoman 2013-02-13 11:18:11
@Lighthart不起作用,因爲引用是針對集合的,而不是針對實體的字段 – mogoman 2013-02-14 20:50:35