如何在 Destroy 函数中删除具有多个参数的数据 - Laravel

How to delete data with multiple parameters in Destroy function - Laravel

如果 user_idhymn_idfavourite_list table[= 匹配,我想删除最喜欢的列表 table 的列18=]

这是我的删除路线:

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

和资源 favouriteController

中我的 'destroy' 函数
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);
}