我有一张供用户注册的表格。此表单有一个文件输入,当用户选择一个文件时,ajax将立即将图像上传到服务器的目录中。还有一个按钮,它将提交表单并将用户信息保存在数据库中的user表中。
每个用户可以有多个图像。Ajax还在文件上传时将图像地址保存在photos表中。此表有user_id列。但是,由于当单击submit按钮而用户尚未注册时将生成user_id,所以我无法在photos表中填充user_id列。当提交整个表单时,将生成用户的id。
因此,当表单提交时,应该通过向photos列添加用户id来更新user_id表吗?或者我必须用ajax将照片保存在temporary_photos表中,然后当点击提交时,将它们保存在主照片表中,然后从临时表中删除它们?
还是有别的办法?
如果用户上传文件,但不按submit按钮就关闭窗口,怎么办?我是如何发现窗口关闭和注册被取消,所以我将删除图像?
发布于 2016-12-14 09:23:08
你在试图解决你创造的一个问题。如果user_id是保存照片的依赖项,那么让用户保存first.If,这样做会使工作流程变得复杂。
因此,我建议您先注册用户,在会话中保存用户id (或登录用户),然后上传照片。
如果必须一起完成,那么让ajax请求注册用户,然后保存照片并将user_id保存在会话变量中。下次上传照片时,您可以从会话变量中获取用户,并保存照片。
function savePhoto(Request $input){
if(Session::has('user_id'){
$user = User::find(Session::get('user_id'));
}
else{
$user = User::create($input->all());
}
$user->photo->save($input->all());
}发布于 2016-12-14 09:25:22
你可以试试这个方法-
因为一个用户可以有多个图像,这意味着这个关系是一对多之间的。所以如果您使用images表,情况会更好。
表:图像
栏:id, user_id, image, uploaded_at
Make user_id字段为空,image列将保存上传图像的名称。成功上传和添加iamges记录到数据库后,将最后插入的ids保存在会话数组中。一旦用户提交表单,创建一个记录到user表,获取最后一个插入它,检查会话数组中是否有任何数据(如果找到),循环遍历数组并按id选择那些图像记录并更新user_id字段。这会解决你的问题。
您还要求一种删除用户未提交表单的图像的方法。要做到这一点,您可以运行cronjob/laravel任务调度。一个将删除图像并删除5分钟前上传的图像和user_id的记录的脚本仍然是空的。
https://stackoverflow.com/questions/41138679
复制相似问题