我有一个供用户注册的表单。此表单有一个文件输入,当用户选择文件时,它会立即通过ajax将图像上传到服务器的目录中。还有一个按钮,它将提交表单并将用户信息保存在数据库的user
表中。
每个用户可以拥有多个图像。文件上传时,Ajax还会在photos
表中保存图像的地址。此表格有user_id
列。但由于在按下提交按钮且用户尚未注册时将生成user_id
,我无法填写user_id
表中的photos
列。提交整个表单时会生成用户ID。
我应该在表单提交时通过将用户ID添加到photos
列来更新user_id
表吗?
或者我必须在temporary_photos
表中使用ajax保存照片,然后在提交时将它们保存在主照片表中并从临时表中删除它们?
还是有另一种方法吗?
如果用户上传文件,但关闭窗口而不点击提交按钮怎么办?我如何发现窗口关闭,注册被取消所以我将删除图像?
答案 0 :(得分:2)
您正在尝试解决您创建的问题。如果user_id
是要保存照片的依赖项,请首先保存用户。如果以其他方式执行此操作,则会使工作流程变得复杂。
所以,我建议你先注册用户,在会话中保存用户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());
}
答案 1 :(得分:0)
您可以尝试这种方式 -
由于用户可以拥有多个图像,这意味着两者之间的关系是一对多。如果使用images
表,那就更好了。
表:图像
专栏:id, user_id, image, uploaded_at
使user_id
字段可以为空,image
列将保存已上传图片的名称。成功上传并将iamges记录添加到数据库后,将最后插入的ID保存在会话数组中。一旦用户提交表单,创建一个记录到用户表,抓取最后一个插入它,检查会话数组中是否有任何数据,如果找到,循环遍历数组并选择那些图像按id记录并更新{{1} }字段。这将解决您的问题。
您还想办法删除用户未提交表单的图片。为此,您可以运行cronjob / laravel任务计划。将删除图像并删除那些上传5分钟(例如)前和user_id
的图像的脚本仍为空。