Удалить несколько строк с помощью Laravel и Vue Js

У меня проблема с удалением нескольких строк в Laravel и Vue Js. Я могу получить значения id в виде массива. Когда я нажимаю кнопку «Удалить», я получаю статус 200, но никакая запись не удаляется из базы данных. Вот мой код: В моей таблице

 <tr v-for="user in users.data" :key="user.id">
                      <td>{{user.id}}</td>
                      <td>{{user.userName}}</td>
                     <td><input type="checkbox" :value="user.id" v-model="checkedNames"></td>
                       <button class="btn btn-warning" @click=" deleteAllUser()">Delete 
                       Selected</button>
                      </td>
                   </tr>

Вью Js

<script>
    export default {
        data(){
         return{
         checkedNames:[],

Функция

deleteAllUser(){
    this.form.post('api/deletehotspotusers/',{id:this.checkedNames}).then(()=>{
                                                                       self.loadHotspotUsers();
                                }).catch(()=> {
                                    Swal.fire("Failed!", "There was something wrong.", "warning");
                                });
                         }
    }

В моем контроллере

public function deleteAll(Request $request){
     if($request->id){
         foreach($request->id as $id){
            HotspotUsers::destroy($id);
         }
     }

Мой маршрут

Route::post('/deletehotspotusers', 'HotspotUsersController@deleteAll');

person user3736334    schedule 02.01.2021    source источник
comment
замените свой URL-адрес API следующим образом.... this.form.post('/api/deletehotspotusers/',{id:this.checkedNames})......вы забыли добавить '/' в начале вашего url .... и если у вас все еще есть такая же проблема, проверьте, что вы получили в своем запросе .... а также попробуйте поймать в своей функции контроллера и dd ($ e) ваше сообщение об исключении   -  person Tanvir Ahmed    schedule 02.01.2021


Ответы (2)


Чтобы удалить запись модели, вам нужно вызвать метод delete. Вы можете попробовать следующее в методе контроллера

//import use statement at the top of the class
//use Illuminate\Support\Arr;
public function deleteAll(Request $request){
    if($request->id){
        HotspotUsers::whereIn('id', Arr::wrap($request->id))->delete();
    }
}

В Vue установите флажок типа ввода, v-model использует проверенное свойство и событие изменения, поэтому v-model будет записывать либо true, либо false в зависимости от проверенного состояния. Чтобы заполнить идентификатор user.id, вам нужно использовать событие изменения

<tr v-for="user in users.data" :key="user.id">
    <td>{{user.id}}</td>
    <td>{{user.userName}}</td>
    <td>
        <input type="checkbox" :value="user.id" @change="onChecked(user.id)"> 
    </td>
    <td>
        <button class="btn btn-warning" @click=" deleteAllUser()">
            Delete Selected
        </button>
    </td>
</tr>

И в разделе скрипта в методах

onChecked(id){
    if(!this.names.includes(id)){
       this.names.push(id)
    } else {
        this.names.splice(this.names.indexOf(id),1)
    }
}
person Donkarnash    schedule 02.01.2021
comment
Спасибо, но в моем интерфейсе то же самое, он показывает успех, но ничего не удаляется. - person user3736334; 02.01.2021
comment
@ user3736334 Обновил ответ - person Donkarnash; 02.01.2021

Я не увлекаюсь vue.js. Если ваш интерфейс работает хорошо, то вот код laravel. Убедитесь, что $request-›id получает ожидаемое значение. Вы можете использовать как

Model::destroy([array of primary keys])

Если первичным ключом вашей модели является идентификатор, вы можете указать массив идентификаторов, например [1,2,3,4]. Но прежде убедитесь, что введенные значения с помощью logger($request-›id). Спасибо

person Sharan    schedule 03.01.2021