Как удалить данные с несколькими параметрами в функции Destroy - Laravel

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

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

Route::resource('fav_hymns', 'Api\favouriteController');
Route::delete('fav_hymns/{user_id}/{hymn_id}/', 'Api\favouriteController@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 (в пути) даже не существует и даже не совпадает, он удаляет все столбцы.

Помощь приветствуется, спасибо

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
930
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваше условие удаления 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().

@NoumanNazir кажется, вы отметили другое решение ... убедитесь, что вы правы. Как и в случае с этим... предположим, что если у вас есть 5000 записей... он может перебирать каждую запись и удалять одну за другой. Так что это не будет хорошим подходом.

Vikash Pathak 10.06.2019 10:45

Делай вот так

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);
}

Другие вопросы по теме