php使用按钮更改某些行的值

php使用按钮更改某些行的值,php,laravel,eloquent,Php,Laravel,Eloquent,我的数据库中有一个abstracts表,其中有abstracts_Status_ID列,我正在尝试创建一个按钮,将每个状态从“2”更改为“3” 我尝试过这样做:- 我的控制器 public function publish($A_ID) { $abstracts = Project::find($A_ID); $abstracts->Abstract_Status_ID= 3; $abstracts->save(); return r

我的数据库中有一个abstracts表,其中有abstracts_Status_ID列,我正在尝试创建一个按钮,将每个状态从“2”更改为“3”

我尝试过这样做:- 我的控制器

    public function publish($A_ID)
{ 
     $abstracts = Project::find($A_ID);
     $abstracts->Abstract_Status_ID= 3;
     $abstracts->save();
     return redirect('/AdvertisedProjects')->with ('success', 'Abstracts Published' );
}
我的路线

Route::put( '/projects', 'AbstractsController@publish');

Route::post( '/projects', 'AbstractsController@publish');
我的观点(项目) 尝试使用csrf代币,但没有,因为有说服力的文档说,没有它,任何post/put都将受到限制

    @if (count ($abstracts)> 0)
    @foreach ($abstracts as $abstract)

    @if($abstract->Abstract_Status_ID == 2)

    {!! Form::open(['action' => ['AbstractsController@publish' , $abstract->A_ID],  'method' => 'post' ]) !!}
    {{ csrf_field() }}
    {{Form::hidden('_method', 'PUT') }}   
    {{Form::Submit('Submit Changes',['class' => 'btn btn-primary'])}}
    {!! Form::close() !!}
    @endif
    @endforeach
单击按钮时出现的错误

(1/1) ErrorException
Missing argument 1 for App\Http\Controllers\AbstractsController::publish() 

此外,上面的代码将显示多个按钮,是否有任何建议使一个按钮更改所有按钮?

您正在使用form method=“POST”。我认为应该是method=“PUT”。

A:如果您想为每个摘要设置一个按钮,只需将路线更改为:

Route::put( '/projects/{A_ID}', 'AbstractsController@publish');

B:如果您只想使用一个按钮来更改所有内容,您可以在隐藏输入中回显其ID,然后发送表单

所以你的观点是:

@if (count ($abstracts)> 0)
{!! Form::open(['action' => ['AbstractsController@publish'],  'method' => 'post' ]) !!}  
{{ csrf_field() }}
{{Form::hidden('_method', 'PUT') }}     
@foreach ($abstracts as $abstract)
    @if($abstract->Abstract_Status_ID == 2)
    {{Form::hidden('abstract_ids[]', $abstract->A_ID) }}     
    @endif
    @endforeach
    {{Form::Submit('Submit Changes',['class' => 'btn btn-primary'])}}
    {!! Form::close() !!}
和您的控制器:

public function publish()
{ 
  foreach(request('abstract_ids') as $A_ID){
    $abstracts = Project::find($A_ID);
     $abstracts->Abstract_Status_ID= 3;
     $abstracts->save();
  }
     return redirect('/AdvertisedProjects')->with ('success', 'Abstracts Published' );
}

代码中的主要问题是路由的定义,将参数($A_ID)传递给controllers publish方法

但在你的路线中,你从来没有提到你正在通过你的路线传递任何论点。因此,为了传递参数,可以在路由URL中使用{$A_ID}

您应该始终记住的一点是,您应该始终为路由指定一个名称,并使用其名称和route()Laravel helper方法调用它

使用路由名称的好处是,如果您决定在开发过程的后期更改路由的URL结构,您将永远不必在应用程序中的任何地方更改它,因为您没有通过其URL调用它

而且路由名称不太容易出错

总的来说,您应该这样定义您的路线

Route::put('projects/{A_ID}/update', 'AbstractsController@publish')->name('projects.update');
Route::post('projects/{A_ID}/post', 'AbstractsController@publish')->name('projects.store');
然后在你的刀片文件中,你可以这样称呼它

{!! Form::open(['action' => route('projects.store', $abstract->A_ID),  'method' => 'post' ]) !!}
希望这能澄清并解决您的问题