laravel如何只恢复软删除最后删除的项目



我有保存所有客户订单的购物车表。

+------------------------------------------------------------------------------+

|id | user_id | product | created_at | updated_at | deleted_at |

+------------------------------------------------------------------------------+

当用户软删除时,我们想软删除他卡片中的所有项目

当用户想要恢复时,我们想要恢复上次中软删除的项目

我可以实现它。

这是我代码中的revert函数:

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];
}

我怎样才能以更好的方式获得deleted_at?

这不是一个干净的代码?

我需要更好的方法来实现这个算法

你几乎做到了:

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];
}

你可以试试这个:

在carts表is_deleted和is_recent中添加新字段,以便用户删除时设置is_deleted=1;并且is_recent=1到要删除的项目,其余is_recent=0;在恢复提取期间,is_recent=1的项目;并保存is_deleted=1

最新更新