如何使用Laravel上传存储和数据库中的文件?

时间:2020-03-22 15:33:58

标签: php mysql laravel file-upload

正在发生奇怪的事情。我认为我可以在某个时候使用它,但是现在由于某种原因它没有起作用。我正在尝试上传简历(Word文档)和视频文件,并将它们同时存储到我的数据库中。我的存储方法可行,但我的更新方法却很奇怪。简历文件被放置在storage / app / public / resumes中,但是如果用户的个人资料中已经有简历,并且想用新的简历更新其个人资料,则说明更新不正确。

我的设置方法是,2个表job_seeker_profiles带有resume_id列,而resumes表带有file列,该文件存储文件路径,我在这两个表之间创建了关系。另外请注意,我将其设置为如果他们上传新的简历,则旧的简历将被删除。

这就是正在发生的事情。单击“更新”按钮后,如果履历表中的id列为10,它将在job_seeker_profiles表的resume_id列中插入11。不管我做什么,总是相差1。我尝试将id存储在变量中,然后插入$ var-1,无论我尝试什么,都没有任何效果。好像不管我尝试什么 那两个id值不能相同。 我收到此错误:

Trying to get property 'file' of non-object

因为我要显示简历,但ID不相同。 这是我的代码:

AdminJobSeekerProfileController.php:

public function store(JobSeekerProfileCreateRequest $request)
    {
        $input = $request->all();

        $user = Auth::user();

        if($file = $request->file('resume_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('resumes', $name);

            $resume = Resume::create(['file'=>$name]);

            $input['resume_id'] = $resume->id;

        }

        if($file = $request->file('video_one_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input['video_one_id'] = $video->id;

        }

        if($file = $request->file('video_two_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input['video_two_id'] = $video->id;

        }

        if($file = $request->file('video_three_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input['video_three_id'] = $video->id;

        }

        $user->jobSeekerProfile()->create($input);

        Alert::success('Your Profile has been created successfully!')->autoclose(5000);

        return redirect('/admin/job-seeker/profile');
    }
public function update(JobSeekerProfileCreateRequest $request)
    {

        $user = Auth::user();

        $input = $request->only([
            'user_id',
            'photo_id',
            'video_one_id',
            'video_two_id',
            'video_three_id',
            'date_of_birth',
            'full_or_part_time',
            'experience',
            'additional_skills',
            ]);

        if($file = $request->file('resume_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('resumes', $name);

            $resume = Resume::create(['file'=>$name]);

            $resumeId = DB::table('resumes')->latest('id')->first();

            $user->jobSeekerProfile()->update(['resume_id' => $resumeId->id]);

        }

        if($file = $request->file('video_one_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input['video_one_id'] = $video->id;

        }

        if($file = $request->file('video_two_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input['video_two_id'] = $video->id;

        }

        if($file = $request->file('video_three_id')) {

            $name = time() . $file->getClientOriginalName();

            $name = preg_replace('/\s+/', '-', $name);

            $file->storeAs('videos', $name);

            $video = Video::create(['file'=>$name]);

            $input['video_three_id'] = $video->id;

        }

        // delete the users first video from the storage/app/public/videos folder and in the videos table
        $oldVideo1 = Video::all()->where('id', $user->jobSeekerProfile()->first()->video_one_id);

        if($oldVideo1->first() != null) {
            Storage::delete('/videos/'.$oldVideo1->first()->file);
            $oldVideo1->first()->delete();
        }

        // delete the users second video from the storage/app/public/videos folder and in the videos table
        $oldVideo2 = Video::all()->where('id', $user->jobSeekerProfile()->first()->video_two_id);

        if($oldVideo2->first() != null) {
            Storage::delete('/videos/'.$oldVideo2->first()->file);
            $oldVideo2->first()->delete();
        }

        // delete the users third video from the storage/app/public/videos folder and in the videos table
        $oldVideo3 = Video::all()->where('id', $user->jobSeekerProfile()->first()->video_three_id);

        if($oldVideo3->first() != null) {
            Storage::delete('/videos/'.$oldVideo3->first()->file);
            $oldVideo3->first()->delete();
        }

        // delete the users resume from the storage/app/public/resumes folder and in the resumes table
        $oldResume = Resume::all()->where('id', $user->jobSeekerProfile()->first()->resume_id);
        Storage::delete('/resumes/'.$oldResume->first()->file);
        $oldResume->first()->delete();


        $user->jobSeekerProfile()->update($input);

        // Sweet Alert
        Alert::success('Your Profile has been updated successfully!')->autoclose(5000);

        return redirect('/admin/job-seeker/profile');
    }

JobSeekerProfile.php模型:

public function resume(){

        return $this->hasOne('App\Resume');

    }

Resume.php模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Resume extends Model
{

    protected $uploads = '';

    protected $fillable = ['file'];

    //create an accessor
    public function getFileAttribute($resume){

        return $this->uploads . $resume;

    }

    public function jobSeekerProfile(){

        return $this->belongsTo('App\JobSeekerProfile');

    }

}

0 个答案:

没有答案