Как удалить данные с несколькими параметрами в функции 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 (в маршруте) даже не существует и даже не совпадает, он удаляет все столбцы.

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


person Nouman Nazir    schedule 10.06.2019    source источник


Ответы (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().

person Vikash Pathak    schedule 10.06.2019
comment
@NoumanNazir, похоже, вы отметили другое решение ... убедитесь, что вы правы. Что касается этого ... предположим, что если у вас есть 5000 записей ... он может перебирать каждую запись и удалять одну за другой. Так что это был бы не лучший подход. - person Vikash Pathak; 10.06.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);
}
person Bimal Prasad Pandey    schedule 10.06.2019