使用 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!');
}