Как загрузить файлы в Stoarge и в мою базу данных, используя Laravel? - PullRequest
0 голосов
/ 22 марта 2020

Нечто странное происходит. Я думаю, что в какой-то момент это работало, но сейчас по какой-то причине это не так. Я пытаюсь загрузить резюме (Word do c) и видеофайлы и одновременно сохранить их в своей базе данных. Мой метод магазина работает, но мой метод обновления ведет себя странно. Файл резюме помещается в хранилище / app / public / resumes, но если пользователь уже имеет резюме в своем профиле и хочет обновить свой профиль новым резюме, оно не обновляется должным образом.

Способ У меня есть это настроено, 2 таблицы job_seeker_profiles со столбцом resume_id и возобновляет таблицу со столбцом файла, который хранит путь к файлу, и я создал связь между двумя таблицами. Также обратите внимание, что я установил, где, если они загрузят новое резюме, старое резюме будет удалено.

Это то, что происходит. После того, как я нажимаю кнопку «Обновить», если столбец идентификатора равен 10 в таблице резюме, он вставляет 11 в столбец resume_id в таблице job_seeker_profiles. Это всегда разница 1, независимо от того, что я делаю. Я попытался сохранить идентификатор в переменной и вставить $ var-1, и ничего не работает, что бы я ни пытался. Кажется, что независимо от того, что я пытаюсь, эти 2 значения не могут быть одинаковыми. Я получаю эту ошибку:

Trying to get property 'file' of non-object

, потому что я пытаюсь отобразить резюме, но идентификаторы не совпадают. Вот мой код:

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');

    }

}
...