ajax保存在数据库中没有外键

问题描述:

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

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

所以我应该更新photos表格,当表格通过将用户的id添加到user_id列提交? 或我必须在temporary_photos表中保存带有ajax的照片,然后当提交时将它们保存在主照片表中并将它们从临时表中删除?

还是有另一种方法?

如果用户上传文件,但在没有按下提交按钮的情况下关闭窗口会怎么样?我如何发现窗户已关闭并且注册被取消,因此我将删除图像?

+0

到目前为止你绑定了什么? –

+0

将照片保存在临时位置。移动到真正的地方并在提交时添加数据库行,这是我可能会做的。 – apokryfos

+0

最好不要让他们在注册前上传照片。 – smoqadam

您正试图解决您创建的问题。如果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()); 
} 
+0

我真的很想知道在重新开始之前是否有任何解决方案。如果我通过ajax请求创建一个用户,那么用户可能会在登录之前关闭该窗口。所以随着时间的推移,我会在数据库中留下未注册用户的口气。 – Niloofar

+0

理想情况下,您应该只存储照片和其他只有注册用户的信息。只有在用户点击注册后,才可以提交照片和注册详细信息,因此用户退出时不必担心。 如果您必须先获取照片,然后注册用户并在用户表中创建一个名为'status'的字段,并在上传照片时将其分配给'temp',并在用户注册后将其更改为'registered'。你可以清除一个cron作业的所有'temp'条目。但这又使工作流程变得复杂。 –

+0

非常感谢。我认为这是最好的答案。我在[本网站](http://www.sheypoor.com/listing/new)中找到了一个我想到的例子,但它是波斯语。这是一个让网上用户投放广告的网站,当您点击左栏的+按钮时,它会将图片发送到服务器,而无需注册任何广告或用户 – Niloofar

你可以试试这个way-

由于一个用户可以拥有多个图像,这意味着关系是一个之间有很多。所以如果你使用images表格更好。

表:图片

列(S):id, user_id, image, uploaded_at

user_id场可为空和image列将节省上传的图片的名称。成功上传并添加iamges记录到数据库后,将最后插入的id保存在会话数组中。一旦用户提交表单,创建一个记录到用户表,抓住最后一个插入它,检查会话数组中是否有任何数据,如果找到,循环访问数组,并选择那些图像记录的ID和更新user_id字段。这将解决您的问题。

您还要求提供一种删除用户未提交表单的图像的方法。要做到这一点,你可以运行一个cronjob/laravel任务schedular。删除图像并删除5分钟前(例如)和user_id上传的图像的记录的脚本仍为空。