laravel如何仅恢复软删除删除的最后一个项目
我有一个购物车表,可以保存所有客户订单 +------------------------------------------------------------------------------+ |id |用户id |产品|创建|更新|删除|在| +------------------------------------------------------------------------------+ 当用户软删除时,我们希望软删除其卡中的所有项目 当用户想要恢复时,我们想要恢复上次软删除的项目 我可以实施它 这是我的代码中的revert函数:laravel如何仅恢复软删除删除的最后一个项目,laravel,laravel-7,soft-delete,Laravel,Laravel 7,Soft Delete,我有一个购物车表,可以保存所有客户订单 +------------------------------------------------------------------------------+ |id |用户id |产品|创建|更新|删除|在| +------------------------------------------------------------------------------+ 当用户软删除时,我们希望软删除其卡中的所有项目 当用户想要恢复时,我们想要恢复上次软
public function revertBackDeletedItems(Request $request)
{
$user = apiGetUser();
if ($user == null) {
return apiAbort(401);
}
$purchaseCartCount = $user->cart()->onlyTrashed()->count();
if ($purchaseCartCount == 0) {
return [
'success' => false,
'message' => 'no items in card '
];
}
$purchaseCartDateTimeInLatestDelete = $user->cart()->onlyTrashed()->orderBy('id', 'desc')->first()['deleted_at'];
$purchaseCarts = PurchaseCart::onlyTrashed()->where('user_id', $user->id)->where('deleted_at', $purchaseCartDateTimeInLatestDelete)->get();
foreach ($purchaseCarts as $key => $purchaseCart) {
$purchaseCart->restore($purchaseCart->id);
}
return ['success' => true];
}
这是只删除上次删除的项目的函数
public function deleteLastTrashed(Request $request)
{
$user = apiGetUser();
if ($user == null) {
return apiAbort(401);
}
$purchaseCartCount = $user->cart()->onlyTrashed()->count();
if ($purchaseCartCount == 0) {
return [
'success' => false,
'message' => 'no items in card '
];
}
$purchaseCartDateTimeInLatestDelete = $user->cart()->onlyTrashed()->orderBy('id', 'desc')->first()['deleted_at'];
$purchaseCarts = PurchaseCart::onlyTrashed()->where('user_id', $user->id)->where('deleted_at', $purchaseCartDateTimeInLatestDelete)->get();
foreach ($purchaseCarts as $key => $purchaseCart) {
$purchaseCart->forceDelete($purchaseCart->id);
}
return ['success' => true];
}
我怎样才能以更好的方式被删除
这不是一个干净的代码
我需要更好的方法来实现此算法您可以尝试以下方法:
在carts表中添加新字段已被删除,并且是最近的,所以无论何时用户将删除,设置为删除=1;要删除的项目的最近值为1,其他项目的最近值为0;
在恢复获取期间,已更新的项目=1;而save is_deleted=1您就快到了:
public function deleteLastTrashed(Request $request)
{
$user = apiGetUser();
if ($user == null) {
return apiAbort(401);
}
$purchaseCartCount = $user->cart()->onlyTrashed()->count();
if ($purchaseCartCount == 0) {
return [
'success' => false,
'message' => 'no items in card '
];
}
// here you know that user has at least one soft deleted cart
$userLastCartSoftDeleted = $user->cart()->onlyTrashed()->orderBy('deleted_at', 'desc')->first();
$userLastCartSoftDeleted->forceDelete();
return ['success' => true];
}