使用 laravel 一键更改两条记录的状态
Change status of two records with one button click with laravel
我有上传表格,管理员可以从中上传不同的文件。目标是在 table 中一次只有一个活动文档。
因此,管理员上传新文档,然后将其标记为有效。几天后,他可以上传另一个默认情况下处于非活动状态的文件。如果管理员使第二个文档处于活动状态,则第一个文档应该变为非活动状态。
这就是我目前所拥有的。
更新路径
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]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update media
set 0
= status, 1
= 0)
我什至不确定函数应该是这样的。我很难做的是单击按钮以 select 所有记录,循环它们并将所有记录更新为 0 (inactive)
然后仅将单击的记录更改为 1(active)
。
改变
DB::table('media')->update(['status', 0]);
到
DB::table('media')->where('status',1)->update(['status' => 0]);
这将更新媒体 table 中的所有条目,使其状态为 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!');
}
我有上传表格,管理员可以从中上传不同的文件。目标是在 table 中一次只有一个活动文档。
因此,管理员上传新文档,然后将其标记为有效。几天后,他可以上传另一个默认情况下处于非活动状态的文件。如果管理员使第二个文档处于活动状态,则第一个文档应该变为非活动状态。
这就是我目前所拥有的。
更新路径
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]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update
media
set0
= status,1
= 0)
我什至不确定函数应该是这样的。我很难做的是单击按钮以 select 所有记录,循环它们并将所有记录更新为 0 (inactive)
然后仅将单击的记录更改为 1(active)
。
改变
DB::table('media')->update(['status', 0]);
到
DB::table('media')->where('status',1)->update(['status' => 0]);
这将更新媒体 table 中的所有条目,使其状态为 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!');
}