我目前正在开发一个利用嵌套类别的项目。很可能很明显,会有一些类别会产生亲子关系。为了解决这个问题,我正在学习lazychaser/laravel-nestedset Laravel软件包如何工作。
我想知道的是,我是否可以将父类别的深度(即根树的最大深度)限制为任意限制(例如5),如下所示:
Category 1
|__ Category 2
|__ Category 3
|__ Category 4
|__ Category 5
继续以上描述...
制作Eloquent模型规则的推荐方法是什么 - 我可以为最大类别深度(根树的最大深度)指定一个整数值?然后,如果已达到最大深度(创建类别时),可能会捕获异常,或处理控制器中的错误?
答案 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);
}
}
重要!这在数据库严格模式下不起作用。
你应该仔细阅读文件〜