/** * Permanently delete given folders and associated files from db and disk. * * @param array|Collection $folders * @return int */ public function deleteFolders($folders) { if (!count($folders)) { return 0; } foreach ($folders as $folder) { //if folder is array it's a model instance, otherwise we will need to fetch it from db if (is_array($folder)) { $folder = Folder::with('files', 'folders')->withTrashed()->findOrFail($folder['id']); } if ($folder->user_id === Auth::user()->id || Auth::user()->isAdmin) { //delete all files foreach ($folder->files as $file) { Storage::deleteDirectory($file->getRelativePath(true)); } //delete all file models from db File::whereIn('id', $folder->files->lists('id'))->forceDelete(); //delete sub-folders and files recursively if (!$folder->folders->isEmpty()) { $this->deleteFolders($folder->folders); } //delete folder model from db $folder->forceDelete(); } } return count($folders); }