2011-09-12 6 views
1

Я работаю над сайтом, на котором есть часть управления файлами, где пользователи могут создавать папки и загружать файлы. Папки CAN имеют подпапки. Папки фактически не созданы в файловой системе; они находятся только в базе данных. Файлы создаются в файловой системе, и информация о файлах находится в базе данных.CakePHP: Обновление нескольких записей с hasMany

Я пытаюсь сделать так, чтобы, если пользователь удаляет папку, она помечает эту папку, а также ее подпапки и файлы как удаленные. Итак, давайте предположим, что пользователь удалил папку с именем "Main", который имел такую ​​структуру:

Главная

Главная \ подпапка \ file.txt

Главная \ Subfolder 2 < - пустая папка

Главная \ Subfolder 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-> data.

Затем сделайте saveAll (или updateAll) в этом массиве.

Вот то, что $ это-массив данных может выглядеть для SaveAll с несколькими моделями затрагиваемым:

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

Я буду держать этот ответ на вещи, связанные с моделью, если вы хотите помочь ж/рекурсивному функцию, давайте сделаем это в отдельном вопросе.

Смежные вопросы