Изменить статус двух записей одним нажатием кнопки с Laravel - PullRequest
0 голосов
/ 11 января 2019

У меня есть форма загрузки, из которой администратор может загружать различные документы. Цель состоит в том, чтобы в таблице был только один активный документ.

Итак, администратор загружает новый документ, который затем помечается как активный. Через несколько дней он может загрузить еще один, который по умолчанию неактивен. Если администратор делает второй документ активным, то первый должен стать неактивным.

Это то, что я имею до сих пор.

Маршрут для обновления

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)

Я даже не уверен, что функция должна быть такой. Что мне сложно сделать, так это щелкнуть по кнопке, чтобы выбрать все записи, зациклить их и обновить все до 0 (inactive), затем изменить только нажатую на 1(active).

1 Ответ

0 голосов
/ 11 января 2019

Изменение

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!');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...