我有一个上传表单,管理员可以从中上传不同的文档。目标是表中一次仅有一个活动文档。
因此,管理员上传新文档,然后将其标记为有效。几天后,他可以上传另一个默认为“不活动”的文件。如果管理员将第二个文档设为“活动”,则第一个文档应变为“非活动”。
这是我到目前为止所拥有的。
更新路线
Route::post('/admin/media/{media}', 'Admin\MediaController@completedUpdate')->name('completedUpdate');
带有按钮的视图
<td>@if($value->status == 1)
<form action="{{ route('completedUpdate', $value->id) }}" method="POST">
{{ csrf_field() }}
<button type="submit" class="btn btn-success" name="changeStatus" value="0">Active</button>
</form>
@else
<form action="{{ route('completedUpdate', $value->id) }}" method="POST">
{{ csrf_field() }}
<button type="submit" class="btn btn-default" name="changeStatus" value="1">Inactive</button>
</form>
@endif
</td>
以及控制器中的功能
public function completedUpdate(Request $request, Mediakit $media)
{
$data = DB::table('media')->get();
foreach($data as $media) {
if ( $media->status == 1 ) {
DB::table('media')->update(['status', 0]);
}
}
$media->status = $request->changeStatus;
$media->save();
return redirect()->back()->with('message', 'Status changed!');
}
当前错误
SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'0'(SQL:更新
media
设置0
=状态,1
= 0)< / p>
我什至不确定该功能应该是这样的。我很难做的是单击按钮以选择所有记录,将它们循环并全部更新为0 (inactive)
,然后仅将单击的记录更改为1(active)
。
答案 0 :(得分:0)
更改
DB::table('media')->update(['status', 0]);
收件人
DB::table('media')->where('status',1)->update(['status' => 0]);
这会将媒体表中的所有条目更新为状态0(当前状态为1)。
您的全部功能将更接近此:
public function completedUpdate(Request $request, Mediakit $media)
{
// Set ALL records to a status of 0
DB::table('media')->where('status',1)->update(['status' => 0]);
// Set the passed record to a status of what ever is passed in the Request
$media->status = $request->changeStatus;
$media->save();
return redirect()->back()->with('message', 'Status changed!');
}