我正在开发一个具有文件管理部分的网站,用户可以在其中创建文件夹和上传文件。文件夹可以有子文件夹。文件系统实际上并未在文件系统上创建;他们只是在数据库中。文件在文件系统上创建,有关文件的信息在数据库中。
我正在尝试这样做,以便在用户删除文件夹时,它会将该文件夹及其子文件夹和文件标记为已删除。因此,假设用户删除了一个名为“Main”的文件夹,该文件夹具有以下结构:
主要
主\子文件夹\ file.txt的
Main \ Subfolder 2< - 空文件夹
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”标记所有文件夹的已删除字段,并使用一个查询标记属于这些文件夹的所有文件。这可能吗?
答案 0 :(得分:1)
当您考虑文件夹可能包含其他文件夹时,此问题会变得更加复杂!
您最终需要一个可以处理任意复杂性的文件结构的脚本。
我建议对有问题的文件结构运行递归函数,并将需要更新的记录添加到大量$ this->数据数组中。
然后,在该阵列上执行saveAll(或updateAll)。
以下是多个模型受影响的saveAll的$ this-data数组可能是什么样的:
$this->data = array(
'Folder' => array(
0 => array('deleted' => 'Y'),
1 => array('deleted' => 'Y'),
),
'File' => array(
0 => array('deleted' => 'Y'),
1 => array('deleted' => 'Y'),
),
)
我会保留这个模型相关内容的答案,如果你需要带递归函数的帮助,让我们在另一个问题中这样做。