Удаление Laravel не работает с маршрутом API - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть этот метод контроллера:

<?php

public function ignore($id)
{
    Log::info($id);
    $st = Servicetype::destroy($id);
    Log::info($st);
    // $st->delete();

    return response(null, Response::HTTP_OK);
}

Кроме того, этот маршрут в Api.php:

Route::delete('/servicetypelinking/{id}/ignore', 'PlanningCenter\Controllers\ServiceTypeLinkingController@ignore');

Я вызываю маршрут из метода Vue.js, который выглядиткак это:

ignore(id) {
  console.log('In the ignore method: ' + id);
  this.mute = true;
  window.axios.delete('/api/servicetypelinking/' + id + '/ignore').then(({ response }) => {
    console.log(response);
    let index = this.serviceTypes.findIndex(serviceType => serviceType.id === id);
    this.serviceTypes.splice(index, 1);

    this.mute = false;
  });
}

Сторона Vue работает, а тип сервиса "удален" на экране.В базе данных ничего не происходит.

Когда я запускаю это для id = 16, я получаю это в laravel.log, который показывает, что правильный метод и правильный идентификатор верны:

[2018-11-26 17:27:42] local.INFO: 16  <-- This is passed in
[2018-11-26 17:27:42] local.INFO: 0   <-- Result of the destroy operation

Я также могу сделать Servicetype :: find (16) -> toArray () для этой модели, и он извлекает данные и отображает их в журнале.

Если я создаю веб-маршрут к этому методу контроллера исделать с идентификатором, удаление происходит в базе данных.По какой-то причине, даже несмотря на то, что идентификатор попадает в метод, вызов метода уничтожения в модели ничего не делает.

Есть ли здесь какая-то секретная вещь Laravel?Любая помощь приветствуется.

Дополнительная информация: Похоже, что-то не так на стороне Vue / Javascript.В консоли нет ошибок, запрос отправляется правильно (используя мой оригинал, а также предложенный с параметром _delete.) Я убедился, что он попадает в метод.Я также жестко закодировал идентификатор в метод destroy (), и он до сих пор не удаляет запись.Также нет ошибок в журнале ошибок laravel.Все должно работать, но это не так.

Решение: Я действительно не нашел решения проблемы, поэтому я обошел ее.Использование

Servicetype::destroy($id);

ничего не сделало.Но, используя:

DB::table('servicetypes')->where('id', $id)->delete();

работал.Я надеялся использовать softdeletes, но обнаружил некоторые другие проблемы с этим и использование построителя запросов, поэтому в конце я сделал небольшое перекодирование, чтобы проблема «ушла».Я могу еще покопаться в этом, когда у меня будет время.Это было странное поведение.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

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

Servicetype::find($id)->delete();

Если это не работает, поэтому необходимо проверить существующую запись с $ id.

Log:info( Servicetype::find($id) );

Если она пуста - тогда проблема с неправильным идентификаторомзаписи.

0 голосов
/ 14 декабря 2018

Решение: Я действительно не нашел решения проблемы, поэтому я обошел его.Использование

Servicetype::destroy($id);

ничего не сделало.Но, используя:

DB::table('servicetypes')->where('id', $id)->delete();

работал.Я надеялся использовать softdeletes, но обнаружил некоторые другие проблемы с этим и использование построителя запросов, поэтому в конце я сделал небольшое перекодирование, чтобы проблема «ушла».Я могу еще покопаться в этом, когда у меня будет время.Это было странное поведение.Я обновил описание соответственно.

0 голосов
/ 27 ноября 2018

попробуйте это:

axios.post('/api/servicetypelinking/' + id +  '/ignore', {_method: 'delete'})
...