ajax在没有外键的情况下保存在数据库中

时间:2016-12-14 09:11:29

标签: php mysql ajax laravel foreign-keys

我有一个供用户注册的表单。此表单有一个文件输入,当用户选择文件时,它会立即通过ajax将图像上传到服务器的目录中。还有一个按钮,它将提交表单并将用户信息保存在数据库的user表中。

每个用户可以拥有多个图像。文件上传时,Ajax还会在photos表中保存图像的地址。此表格有user_id列。但由于在按下提交按钮且用户尚未注册时将生成user_id,我无法填写user_id表中的photos列。提交整个表单时会生成用户ID。

我应该在表单提交时通过将用户ID添加到photos列来更新user_id表吗? 或者我必须在temporary_photos表中使用ajax保存照片,然后在提交时将它们保存在主照片表中并从临时表中删除它们?

还是有另一种方法吗?

如果用户上传文件,但关闭窗口而不点击提交按钮怎么办?我如何发现窗口关闭,注册被取消所以我将删除图像?

2 个答案:

答案 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的图像的脚本仍为空。