Как обновить данные в Laravel контроллере? - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь обновить детали моего шаблона в контроллере. Но в настоящее время мой код не работает. Это не обновление полей. Во всяком случае, если я добавлю $ template-> save (). Сохраняет обновленную запись как новую запись. Как заставить мой текущий код работать? Почему я сталкиваюсь с этой ситуацией? Пожалуйста, кто-нибудь, объясните мне и исправьте мой код, пока я учусь Laravel. Заранее спасибо.

функция обновления в TemplateController

public function update(Request $request, $id)
    {
        if(! lara_club_has_permission('edit-template') ){
            return view('403');
        }

        $this->validate($request, [
                'title'=>'required',
                'start_date'=> 'required',
                'end_date'=>'required',
                'template_content'=>'required',
            ]
        );

        //check status response
        if(isset($request->status)&&$request->status=='on'){
            $status='1';
        }else{
            $status="0";
        } 

        $template=new Template();

        $template->title=$request->title;
        $template->start_date=convert_to_sql_date_format($request->start_date);
        $template->end_date=convert_to_sql_date_format($request->end_date);
        $template->is_active=$status;
        $template->template_content=$request->template_content;

        $input = $request->all();

        $template->update($input);

        $name = $input['title'];

        return redirect()->route('templates.index')->with('success', 'Template <b>'. $name.'</b> Updated!');
    }

Ответы [ 3 ]

1 голос
/ 14 февраля 2020

Вы должны использовать метод Laravel find вместо объявления его нового экземпляра.

Это должно быть

$template=Template::find($id);

Не

$template=new Template();
1 голос
/ 14 февраля 2020

В моем случае я указываю имя таблицы в имени метода, например:

public function update(Request $request, Template $id)
{
    $id->title=$request->title;
    $id->start_date=convert_to_sql_date_format($request->start_date);
    $id->end_date=convert_to_sql_date_format($request->end_date);
    $id->is_active=$status;
    $id->template_content=$request->template_content;

    $input = $request->all();

    $id->update($input);
}
1 голос
/ 14 февраля 2020

вы создаете новый объект $template=new Template();, но вам нужно обновить существующий, поэтому попробуйте код ниже

        $template=Template::find($id);
        //or use $template=Template::where('id',$id)->first();

        $template->title=$request->title;
        $template->start_date=convert_to_sql_date_format($request->start_date);
        $template->end_date=convert_to_sql_date_format($request->end_date);
        $template->is_active=$status;
        $template->template_content=$request->template_content;

        $input = $request->all();

        $template->update($input);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...