2011-09-12 156 views
1

我正在研究一個網站,該網站具有文件管理部分,用戶可以在其中創建文件夾並上傳文件。文件夾可以有子文件夾。文件夾實際上並未在文件系統上創建;他們只是在數據庫中。這些文件是在文件系統上創建的,並且有關這些文件的信息在數據庫中。CakePHP:使用hasMany更新多條記錄

我試圖讓它如此,如果用戶刪除一個文件夾,它將該文件夾及其子文件夾和文件標記爲已刪除。所以我們可以說一個用戶刪除了一個名爲 「主」 文件夾中有這樣的結構:

主要

主要\子文件夾\ file.txt的

主要\子文件夾2 < - 空文件夾

主\子文件夾3 \ image.jpg的

我能夠以紀念所有被刪除場的‘Y’的文件夾中是這樣的:

foreach ($folders_to_delete as $folder_to_delete) { 
    $updateAll_conditions['OR'][] = array('id' => $folder_to_delete); 
} 

$this->UserFolder->updateAll(array('UserFolder.deleted' => "'Y'"), $updateAll_conditions) 

但我想用一個「Y」標記所有文件夾的刪除字段以及屬於這些文件夾的所有文件......用一個查詢。那可能嗎?

回答

1

當您考慮文件夾可能包含另一個文件夾時,此問題變得更加複雜!

你最終會想要一個腳本來處理任意複雜的文件結構。

我建議對有問題的文件結構運行遞歸函數,並將需要更新的記錄添加到大量的$ this->數據數組中。

然後,在該陣列上執行saveAll(或updateAll)。

這裏有一個$該數據陣列可能看起來像有多個機型白水有什麼影響:

$this->data = array(
    'Folder' => array(
     0 => array('deleted' => 'Y'), 
     1 => array('deleted' => 'Y'), 
    ), 
    'File' => array(
     0 => array('deleted' => 'Y'), 
     1 => array('deleted' => 'Y'), 
    ), 
) 

我會記住這答案的模型相關的東西,如果你想幫助瓦特/遞歸函數,讓我們在單獨的問題中這樣做。