Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
laravel如何仅恢复软删除删除的最后一个项目_Laravel_Laravel 7_Soft Delete - Fatal编程技术网

laravel如何仅恢复软删除删除的最后一个项目

laravel如何仅恢复软删除删除的最后一个项目,laravel,laravel-7,soft-delete,Laravel,Laravel 7,Soft Delete,我有一个购物车表,可以保存所有客户订单 +------------------------------------------------------------------------------+ |id |用户id |产品|创建|更新|删除|在| +------------------------------------------------------------------------------+ 当用户软删除时,我们希望软删除其卡中的所有项目 当用户想要恢复时,我们想要恢复上次软

我有一个购物车表,可以保存所有客户订单

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

|id |用户id |产品|创建|更新|删除|在|

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

当用户软删除时,我们希望软删除其卡中的所有项目

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

我可以实施它

这是我的代码中的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];
}
我怎样才能以更好的方式被删除

这不是一个干净的代码

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

您可以尝试以下方法:

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