lazychaser / laravel-nestedset - 如何在项目创建时限制嵌套项目的深度?

时间:2017-05-05 10:28:05

标签: php laravel laravel-5.2 laravel-5.1 laravel-5.3

我目前正在开发一个利用嵌套类别的项目。很可能很明显,会有一些类别会产生亲子关系。为了解决这个问题,我正在学习lazychaser/laravel-nestedset Laravel软件包如何工作。

我想知道的是,我是否可以将父类别的深度(即根树的最大深度)限制为任意限制(例如5),如下所示:

Category 1
|__ Category 2
    |__ Category 3
        |__ Category 4
            |__ Category 5

继续以上描述...

制作Eloquent模型规则的推荐方法是什么 - 我可以为最大类别深度(根树的最大深度)指定一个整数值?然后,如果已达到最大深度(创建类别时),可能会捕获异常,或处理控制器中的错误?

1 个答案:

答案 0 :(得分:0)

要获取指定级别的节点,您可以应用约束:

[HttpPost] public async Task<object> UploadFile() { if (!Request.Content.IsMimeMultipartContent("form-data")) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType)); } var streamProvider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/App_Data/Temp/")); try { var filesReadToProvider = await Request.Content.ReadAsMultipartAsync(streamProvider); var paramName = "formInput"; var formStreamToRead = filesReadToProvider.Contents.First(x => x.Headers.ContentDisposition.Name == $"\"{formInput}\""); var formInput = await formStreamToRead.ReadAsStringAsync(); foreach (var fileData in streamProvider.FileData) { var fileName = ""; if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName)) { fileName = Guid.NewGuid().ToString(); } fileName = fileData.Headers.ContentDisposition.FileName; if (fileName.StartsWith("\"") && fileName.EndsWith("\"")) { fileName = fileName.Trim('"'); } if (fileName.Contains(@"/") || fileName.Contains(@"\")) { fileName = Path.GetFileName(fileName); } File.Move(fileData.LocalFileName, Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data/"), Path.GetDirectoryName(fileName) + Guid.NewGuid() + Path.GetExtension(fileName))); } return Request.CreateResponse(HttpStatusCode.OK); } catch (Exception e) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); } }

重要!这在数据库严格模式下不起作用。

你应该仔细阅读文件〜