Laravel 附加文件重复数据库记录

Posted

技术标签:

【中文标题】Laravel 附加文件重复数据库记录【英文标题】:Laravel Attach Files Duplicates Database Record 【发布时间】:2021-05-01 04:34:48 【问题描述】:

我正在使用:Laravel、Vue JS、dropzone。

上传一个文件时可以正常工作,但上传 3 个文件时会创建一个新的作业记录,如下所示:

作业 ID:1,文件:1、2

作业 ID:2,文件:3

应该看起来像:

作业 ID:1,文件:1,2,3

上传代码如下:

public function store() 

    $data = request()->validate([
       'title' => '',
       'description' => '',
       'start_date' => '',
        'due_date' => '',
        'group_id' => '',
        'dropzonefile' => '',
        'live_status' => '',
    ]);

// Create homework record...
    $task = request()->user()->homeworks()->create([
        'title' => $data['title'],
        'description' => $data['description'],
        'start_date' => $data['start_date'],
        'due_date' => $data['due_date'],
        'live_status' => $data['live_status'],
    ]);

// Add homework to some groups...
    $task->groups()->attach(Arr::pluck(json_decode($data['group_id']), 'group_id'));

// Upload all files...
    if (isset($data['dropzonefile'])) 
        foreach ($data['dropzonefile'] as $attachment) 
            $attachmentName = $attachment->store('userFiles', 'public');

            $attachmentInfo = request()->user()->attachments()->create([
                'reference_name' => $attachmentName,
                'original_file_name' => $attachment->getClientOriginalName(),
            ]);

            $task->attachments()->attach($attachmentInfo->id);
        
    

    return new TaskResource($task);

前端代码:

dropzoneOptions: 
                    paramName: "dropzonefile",
                    url: '/api/homework',
                    thumbnailWidth: 150,
                    maxFilesize: 20,
                    maxFiles: 5,
                    addRemoveLinks: true,
                    uploadMultiple: true,
                    autoProcessQueue: false,
                    headers: 
                        'X-CSRF-TOKEN': document.head.querySelector('meta[name=csrf-token]').content,
                    ,
                    sending: (file, xhr, formData) => 
                        formData.append('title', this.taskTitle);
                        formData.append('description', this.content);
                        formData.append('start_date', this.selectedSetDate);
                        formData.append('due_date', this.selectedDueDate);
                        formData.append('group_id', JSON.stringify(this.value));
                        formData.append('live_status', this.liveStatus);
                    ,
                    success: (event, res) => 
                        // alert('success');
                        console.log(event);
                        this.makeToast(true,'info');
                        this.$router.push('/Teacher')
                    
                ,

【问题讨论】:

我没有看到你的代码有任何问题,也许问题就在前面 是的,它真的很奇怪,我将添加前端请求代码。 【参考方案1】:

我想我找到了答案: upload multiple files in one request Dropzone sending two requests

好像我错过了一些 dropzone 选项:

autoDiscover: false,
parallelUploads: 10,

【讨论】:

以上是关于Laravel 附加文件重复数据库记录的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中按日期删除重复的数据库记录

迭代数据时,Laravel 无法将 stdClass 类型的对象用作 Job 的数组 [重复]

将数据附加到属性文件,注释消失并更改数据顺序[重复]

Perl - 读取文件并将数据附加到已经存在的行[重复]

log4j:警告找不到记录器的附加程序(运行 jar 文件,而不是 Web 应用程序)[重复]

使用laravel中的日期组从数据库中获取数据[重复]