Как удалить данные с несколькими параметрами в функции Destroy - Laravel - PullRequest
0 голосов
/ 10 июня 2019

Я делаю простой запрос и хочу удалить столбцы таблицы избранного, если user_id и hymn_id совпадают с favourite_list таблицей

вот мой маршрут удаления:

Route::resource('fav_hymns', 'Api\favouriteController');
Route::delete('fav_hymns/{user_id}/{hymn_id}/', 'Api\favouriteController@destroy');

и моя функция 'destroy' в ресурсе favouriteController

public function destroy($user_id,$hymn_id)
{

    $favourite_list = favourite_list::where('user_id','=',$user_id, 'AND', 'hymn_id', '=', $hymn_id)->delete();


    if (!$favourite_list) {
        return response()->json([
            'success' => false,
            'message' => 'Error: List not found'
        ], 400);
    }

    if ($favourite_list) {
        return response()->json([
            'success' => true
        ]);
    } else {
        return response()->json([
            'success' => false,
            'message' => 'List could not be deleted'
        ], 500);
    }
}

но проблема в том, что он удаляет все столбцы, если $user_id соответствует, а $hymn_id (в маршруте) даже не существует и даже не совпадает, а удаляет все столбцы.

Помощь будет оценена, спасибо

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Ваше удаление where() условие здесь неверно.Вы должны попробовать как.

try{

 favourite_list::where('user_id', $user_id)
                            ->where('hymn_id', $hymn_id)
                            ->delete();

} catch(\Exception $e){
    return response()->json([
            'success' => false,
            'message' => 'List could not be deleted'
    ], 500);
}


 return response()->json([
     'success' => true
 ]);

Каждое условие должно быть заключено в разные where().Если вам нужен формат SQL ... попробуйте использовать whereRaw().

0 голосов
/ 10 июня 2019

Сделай вот так

public function destroy($user_id,$hymn_id)
{

    $favourite_lists =favourite_list::where('user_id', $user_id)
                            ->where('hymn_id', $hymn_id)->get();

    foreach($favourite_lists as $favourite_list)
    {
      $favourite_list->delete();
    }
    return response()->json("records deleted",200);
}
...