2012-09-01 91 views
1

問題描述: 我在實體類中生成一個文件,並想將文件名保存到數據庫中。控制器不知道這個(wheter或不是文件名發生了變化,所以它不是實際的從控制器持續。Symfony2/Doctrine:如何從實體類中堅持一個實體?

是否有實體的堅持自己的方法嗎?的

比如我使用: 實體類用於圖庫中的圖像,我總是保留原始文件並使用該文件的緩存版本,當圖像發生更改(例如旋轉)時,緩存的版本將被刪除。版本在其他情況下也會被刪除,當需要這個文件時,我會檢查緩存文件是否存在,否則會從存檔的圖像中重新生成一個新的文件名我需要一個新的文件名,因爲這會重置緩存中的各種縮略圖si ZES。

當我生成該新文件時,我必須以某種方式將其文件名保存到數據庫。因爲它只是在實體中決定何時重新生成映像,所以如果實體可以堅持自己到數據庫中,這將是切實可行的,但是我還沒有找到解決方案。

有沒有辦法做到這一點或有一個完全不同的概念,我應該用來重新生成圖像文件?

+2

不要問題。你只堅持實體一次,然後你與一個主體爲你創造的實體一起工作。如果你有一個具有兩個字段[orig_filename,cached_filename]的實體,並且該實體由doctrine管理,那麼當你更改任何屬性時,它將自動更新flush()上的數據庫。 – meze

回答

1

原則中的實體不是active records - 他們不能自己執行持續性操作,所以他們依靠一個Big Brother [實體經理]。

即使控制器不知道任何文件名是否已更改,you做 - 只是堅持每一次你的照片:如果沒有改變,主義不會觸及實體。

看看lifecycle events也許你可以找到有用的方法在持久性之前觸發一個​​方法[例如,生成縮略圖]。

+0

我有點期待,但謝謝你的確切解釋。從控制器持久化不是一個真正的選擇,因爲文件的重新生成實際上也可以通過模板(entity.getWebPath,如果文件不存在)觸發。 **但是**:使用lifecyce事件可能是一個真正的goo想法,它可以在postLoad上重新生成文件,而不是當我想要顯示它時。 – ubrog

+0

Aaaarg,我是新來的Stackoverfow,它太早保存了我的評論... 我正在與postLoad,然後該文件將生成之前我呈現模板,我可以堅持從控制器。感謝您的回答。 – ubrog

+0

與你無關的問題,只是爲了讓你知道,如果你太早保存評論(或問題或答案),你可以編輯它並修改它,不需要添加新的評論 –