CakePHP:使用hasMany更新多个记录

时间:2011-09-12 17:21:10

标签: cakephp

我正在开发一个具有文件管理部分的网站,用户可以在其中创建文件夹和上传文件。文件夹可以有子文件夹。文件系统实际上并未在文件系统上创建;他们只是在数据库中。文件在文件系统上创建,有关文件的信息在数据库中。

我正在尝试这样做,以便在用户删除文件夹时,它会将该文件夹及其子文件夹和文件标记为已删除。因此,假设用户删除了一个名为“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”标记所有文件夹的已删除字段,并使用一个查询标记属于这些文件夹的所有文件。这可能吗?

1 个答案:

答案 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'),
    ),
)

我会保留这个模型相关内容的答案,如果你需要带递归函数的帮助,让我们在另一个问题中这样做。