使用laravel一键式更改两个记录的状态

时间:2019-01-11 09:49:39

标签: php laravel laravel-5 laravel-5.6

我有一个上传表单,管理员可以从中上传不同的文档。目标是表中一次仅有一个活动文档。

因此,管理员上传新文档,然后将其标记为有效。几天后,他可以上传另一个默认为“不活动”的文件。如果管理员将第二个文档设为“活动”,则第一个文档应变为“非活动”。

这是我到目前为止所拥有的。

更新路线

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)

1 个答案:

答案 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!');
}