Как я могу обновить все поля, кроме 1 в одной таблице, и обновить 1 вход во второй таблице? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть базовая форма c для кандидата для заполнения профиля. Одним из обязательных полей является загрузка резюме со столбцом resume_id, int(11), в таблицу job_seeker_profiles. У меня есть еще один стол под названием «Резюме», я думал, что создал отношения должным образом, но, возможно, я этого не сделал. В моем методе store все данные в форме сохраняются в таблице job_seeker_profiles, кроме резюме. Это сохраняется в таблице резюме, столбце с именем «file», а идентификатор из этой записи вставляется в столбец resume_id в таблице job_seekers_profiles с отношениями, которые я создал ранее. Мой метод магазина работает отлично, но мой метод обновления - нет. Он продолжает вставлять фактическое имя файла в столбец resume_id, и ничего не вставляется в таблицу резюме.

AdminJobSeekerProfileController.php file:

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)
    {

        $input = $request->all();

        $user = Auth::user();

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

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

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

Это ошибка, которую я получаю :

SQLSTATE[42S22]: Column not found: 1054 Unknown column '_method' in 'field list'

Вот снимок экрана с полной ошибкой, вы можете видеть на снимке экрана, что он пытается вставить имя загруженного файла в столбец resume_id вместо целого числа.

`resume_id` = Peter_Brewed_Resume_2020.docx,

enter image description here

Ответы [ 2 ]

1 голос
/ 19 марта 2020

ваша проблема $request->all();. Вы редко хотите позволить пользователям произвольно помещать данные в вашу БД. Как минимум, вы должны указать, какие поля им разрешено обновлять. Лучше было бы очистить данные для соответствия перед фиксацией в БД.

Вы, вероятно, хотите что-то вроде

$request->only(['first_name', 'last_name', 'email', 'date_of_birth' ..... ]);

Кроме того, вам нужно разместить свои файлы так же, как вы делали в метод создания.

0 голосов
/ 19 марта 2020

Мне не хватало 'files'=>true в моей форме редактирования:

{!! Form::model($jobSeekerProfiles, ['method'=>'PATCH', 'action'=> ['AdminJobSeekerProfileController@update', $jobSeekerProfiles->id], 'files'=>true]) !!}

В сочетании с использованием $request->only оно теперь работает.

...