CakePHP: обновление нескольких записей с помощью hasMany - PullRequest
1 голос
/ 12 сентября 2011

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

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

Main

Main \ Subfolder \ file.txt

Main \ Subfolder 2 <-пустая папка </p>

Main \ 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 Ответ

1 голос
/ 07 декабря 2011

Эта проблема становится еще более сложной, если учесть, что папка может содержать другую папку!

В конечном итоге вам понадобится скрипт, который может обрабатывать файловые структуры произвольной сложности.

Я предлагаю запустить рекурсивную функцию для рассматриваемой файловой структуры и добавить записи, которые необходимо обновить, в массив $ this-> data.

Затем выполните saveAll (или updateAll) для этого массива.

Вот как может выглядеть массив $ this-data для saveAll с несколькими затронутыми моделями:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...