Я делаю простую хрень и хочу удалить столбцы таблицы списка избранных, если 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 (в пути) даже не существует и даже не совпадает, он удаляет все столбцы.
Помощь приветствуется, спасибо






Ваше условие удаления 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().
Делай вот так
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);
}
@NoumanNazir кажется, вы отметили другое решение ... убедитесь, что вы правы. Как и в случае с этим... предположим, что если у вас есть 5000 записей... он может перебирать каждую запись и удалять одну за другой. Так что это не будет хорошим подходом.