Laravel:点击按钮时更新列的值

时间:2017-12-21 20:43:53

标签: php jquery mysql laravel eloquent

您好我还是laravel的新手,我在网上搜索了近3个小时这个问题我尝试了很多东西,但它没有用。

所以当我点击那个按钮"批准"我想将值从0更新为1(列的类型为boolean)。 这是我的控制者:

public function approve($id){
    $training = Training::find($id);
    $training->update(['Approved' =>'1']);


    // $training->Approved = 1;
   // $training->save();
    return redirect('/trainings')->with('success', 'Training Approved');
}

这是页面部分,其中的按钮位于文件夹培训中,名称为" show.blade.php" :

 {!!Form::open(['action' => ['TrainingsController@approve',$training->TrainingsID], 'method' => 'POST','class' => 'pull-left'])!!}
            {{Form::hidden('_method','PUT')}}
            {{Form::submit('Approve',['class' => 'btn btn-success'])}}

    {!!Form::close()!!} 

和路线(我猜这是我做错的部分):

Route::post('/trainings',['as' =>'trainings.show', 'uses' => 'TrainingsController@approve']);

单击按钮时出现的错误是:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

由于路线为post,您应该将表单方法更改为发布:

{{ Form::hidden('_method','POST') }}

或者:

{!! Form::open(['method' => 'post', 'action' => ....

您还需要将id添加到路径定义中:

Route::post('trainings/{id}', ['as' => 'trainings.show', 'uses' => 'TrainingsController@approve']);

答案 1 :(得分:0)

由于您使用了POST操作,因此您不需要进行方法欺骗。它仅对PUTPATCHDELETE

有用

您当前的路线定义错误,因为您将trainings/showapprove操作相关联。实际上它应该是show动作。

这是应该工作的代码(未经测试)

class TrainingsController extends Controller 
{
    public function show(Training $training) // Using Route Model binding here 
    {
         return view('trainings.show', ['training' => $training]);
    }

    public function approve(Training $training) 
    {
        $training->update(['Approved' => '1']);

        return redirect()->route('trainings')->with('success', 'Training Approved'); // if you want to redirect to a list of all trainings and would need an index action
        // return redirect()->route('trainings', ['training' => $training])->with('success', 'Training Approved'); // if you want redirect to detail page of this training
    }
}

路由/ web.php

Route::post('trainings/{training}/approve', ['as' => 'trainings.approve', 'uses' => 'TrainingsController@approve']); 
Route::get('trainings/{training}', ['as' => 'trainings.show', 'uses' => 'TrainingsController@show']);

刀片

{!!Form::open('route' => ['trainings.approve', $training->TrainingsID], 'class' => 'pull-left'])!!}
    {{Form::submit('Approve',['class' => 'btn btn-success'])}}
{!!Form::close()!!} 

对您的代码的一些评论:

  • TrainingsID这样的ID是多余的,因为您已经知道这是培训的ID
  • 坚持模型/数据库字段的snake_case表/属性名称