Обновление 2 таблиц с 1 формой в laravel - PullRequest
0 голосов
/ 01 октября 2018

У меня есть users таблица и profiles таблица, теперь я хочу, чтобы пользователи могли обновлять свою информацию в единой форме.

Логика

  1. имя и адрес электронной почты будут обновляться вТаблица пользователей
  2. остальные поля будут обновлены в таблице профилей

Код

blade (форма)

{{ Form::model($user, array('route' => array('profileupdate', $user->id), 'method' => 'PUT','files' => true)) }}
                <div class="row">
                    <div class="col-md-6">
                        <label for="name">Name</label>
                        {{Form::text('name', null, array('class' => 'search-field'))}}
                    </div>
                    <div class="col-md-6">
                        <label for="email">Email</label>
                        {{Form::text('email', null, array('class' => 'search-field'))}}
                    </div>
                    <div class="col-md-6 mt-3">
                        <label for="about">About</label>
                        {{Form::textarea('about', null, array('class' => 'search-field'))}}
                    </div>
                    <div class="col-md-6 mt-3">
                        <div class="row">
                            <div class="col-md-6">
                                <label for="phone">Phone</label>
                                {{Form::text('phone', null, array('class' => 'search-field'))}}
                            </div>
                            <div class="col-md-6">
                                <label for="website">Website</label>
                                {{Form::text('website', null, array('class' => 'search-field'))}}
                            </div>
                            <div class="col-md-6 mt-3">
                                <label for="state">State</label>
                                {{Form::text('state', null, array('class' => 'search-field'))}}
                            </div>
                            <div class="col-md-6 mt-3">
                                <label for="city">City</label>
                                {{Form::text('city', null, array('class' => 'search-field'))}}
                            </div>
                            <div class="col-md-12 mt-3">
                                <label for="photo">Photo</label>
                                {{Form::file('photo', array('class' => 'search-field'))}}
                            </div>
                        </div>
                    </div>

                    <div class="col-md-12">
                        {{ Form::submit('Update', array('class' => 'btn btn-success mt-5')) }}
                    </div>
                </div>

{{Form::close()}}

Снимок экрана (код выше)

one

controller

public function update(Request $request, $id)
{
        $user = User::find($id);
        $user = User::where('id',$id)->first();
        $user->name = $request->input('name');
        $user->save();

        $profile = Profile::find($id);
        $profile = Profile::where('id',$id)->first();
        $profile->user_id = $request->input('user_id');
        $profile->about = $request->input('about');
        $profile->website = $request->input('website');
        $profile->phone = $request->input('phone');
        $profile->state = $request->input('state');
        $profile->city = $request->input('city');

        if ($request->hasFile('photo')) {
            $photo = $request->file('photo');
            $filename = 'photo' . '-' . time() . '.' . $photo->getClientOriginalExtension();
            $location = public_path('images/' . $filename);
            Image::make($photo)->resize(1300, 362)->save($location);
            $profile->photo = $filename;

            $oldFilename = $profile->photo;
            $profile->photo = $filename;
            Storage::delete($oldFilename);
        }

        $profile->save();
        return redirect()->route('profile', $user->id)->with('success', 'Your info are updated');
}

PS: пожалуйста, не переходите смой метод контроллера, я просто поместил данные таким образом, чтобы вы могли знать, какое поле принадлежит какой таблице.

Вопрос

Любая идея, как я могу сохранить свои данные в 2таблицы одновременно?

И я получаю эту ошибку

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Нет сообщения

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Поскольку вы не можете вставить в несколько таблиц в одной команде MySQL, не существует способа выполнить ваше требование.Однако Вы можете использовать Одиночная транзакция .

DB::trasaction(function() {
    // first update
    User::whereId($id)->update([
        'name'  => $reqquest->name,
        'email' => $request->email
    ]);


    // second update
    Profile::whereId($id)->update([
        'about'  => $request->website,
        'mobile' => $request->mobile,
        ..........
        ..........
    ]);
}
0 голосов
/ 01 октября 2018

Необходимо проверить, сохраняется ли в обоих случаях или нет

public function update(Request $request, $id)
{
    $user = User::find($id);
    $user = User::where('id',$id)->first();
    $user->name = $request->input('name');
    if($user->save())
    {
    $profile = Profile::find($id);
    $profile = Profile::where('id',$id)->first();
    $profile->user_id = $request->input('user_id');
    $profile->about = $request->input('about');
    $profile->website = $request->input('website');
    $profile->phone = $request->input('phone');
    $profile->state = $request->input('state');
    $profile->city = $request->input('city');

    if ($request->hasFile('photo')) {
        $photo = $request->file('photo');
        $filename = 'photo' . '-' . time() . '.' . $photo->getClientOriginalExtension();
        $location = public_path('images/' . $filename);
        Image::make($photo)->resize(1300, 362)->save($location);
        $profile->photo = $filename;

        $oldFilename = $profile->photo;
        $profile->photo = $filename;
        Storage::delete($oldFilename);
    }

    $profile->save();
    return redirect()->route('profile', $user->id)->with('success', 'Your info are updated');
}
    return redirect()->back()->with('error','Something went wrong');
}

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Это исключение возникает, когда вы пытаетесь получить доступ к методу post с помощью перехода по URL-адресу в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...