如何在 Destroy 函数中删除具有多个参数的数据 - Laravel
Posted
技术标签:
【中文标题】如何在 Destroy 函数中删除具有多个参数的数据 - Laravel【英文标题】:How to delete data with multiple parameters in Destroy function - Laravel 【发布时间】:2019-10-24 15:00:14 【问题描述】:如果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
(在路由中)甚至不存在甚至不匹配,它会删除所有列,它会删除所有列。
不胜感激,谢谢
【问题讨论】:
【参考方案1】:您的删除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 条记录...它可以遍历每条记录并一一删除。所以这不是一个好方法。【参考方案2】:这样做
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);
【讨论】:
以上是关于如何在 Destroy 函数中删除具有多个参数的数据 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章