[英]Update status in database using checkbox - Laravel
該項目可以具有不同的狀態。 選中該復選框,我試圖將項目的狀態從已請求(1)切換為已接受(2)。 如果未選中此復選框,則狀態為1,選中狀態為2。
當我選中復選框時,我得到了419,但這通常與令牌有關,但是我添加了@csfr字段。 為什么狀態在數據庫中未更改? 謝謝你的幫助。
@foreach ($projects as $project)
<tbody>
<tr>
<form action="/projects/plan" method="post" id="statusForm">
@csrf
<input name="id" type="hidden" value="{{$project->id}}">
<td>
<input type="hidden" value="{{$project->status}}" name="status">
<input {{isset($project['status']) && $project['status'] == '2' ? 'checked' : ''}}
value="{{$project->status}}" type="checkbox" name="status"
onchange="document.getElementById('statusForm').submit()"
>
</td>
</form>
<td>{{$project->applicant_name}}</td>
<td>{{$project->project_name}}</td>
<td><a href="/events/{{$projects->id}}/edit" class="btn btn-secondary btn-sm" role="button">Project Details</a></td>
</tr>
</tbody>
@endforeach
const STATUS_requested = 1;
const STATUS_ACCEPTED = 2;
public function updateStatus( $status )
{
$this->update([
'status' => $status
]);
$this->refresh();
return $this;
}
public function projectAccept() {
return $this->updateStatus( self::STATUS_ACCEPTED );
}
public function plan(Request $request)
{
dd('hello');
Event::find($request->id)->projectAccept();
return Project::STATUS_ACCEPTED;
}
// Update status project
Route::post('/projects/plan', 'ProjectsController@plan');
首先,如果您有多個具有相同ID的DOMS,則無法按ID document.getElementById('statusForm').submit()
進行選擇。
改變你的循環像這樣
@foreach ($projects as $project)
<tbody>
<tr>
<td>
<form action="/projects/plan" method="post" id="statusForm{{$project->id}}">
@csrf
<input name="id" type="hidden" value="{{$project->id}}">
<input {{isset($project['status']) && $project['status'] == '2' ? 'checked' : ''}}
value="2" type="checkbox" name="status"
onchange="document.getElementById('statusForm{{$project->id}}').submit()"
>
</form>
</td>
<td>{{$project->applicant_name}}</td>
<td>{{$project->project_name}}</td>
<td><a href="/events/{{$projects->id}}/edit" class="btn btn-secondary btn-sm" role="button">Project Details</a></td>
</tr>
</tbody>
@endforeach
現在,復選框僅在選中時才以表格形式發送,因此該輸入不需要變量值
<input {{isset($project['status']) && $project['status'] == '2' ? 'checked' : ''}}
value="2" type="checkbox" name="status"
onchange="document.getElementById('statusForm{{$project->id}}').submit()"
>
最后,當您恢復輸入status
,請為未選中的輸入設置默認值(您可以使用此輸入刪除隱藏的輸入)。 或者像您所做的那樣,設置一個隱藏的輸入,將其與每次發送的原始值一起發送。 兩種解決方案都是完美的。
public function plan(Request $request)
{
$status = $request->input('status', Project::STATUS_requested);
Event::find($request->id)->projectAccept();
return Project::STATUS_ACCEPTED;
}
這樣,如果選中它,它將是2(在請求中),否則,默認值將是1。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.