【问题标题】:laravel how to revert only last items deleted by soft deletelaravel如何仅恢复软删除删除的最后一项
【发布时间】:2020-10-28 14:10:29
【问题描述】:

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

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

|编号 |用户 ID |产品 | created_at |更新_at |删除_at |

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

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

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

我可以实现它。

这是我代码中的还原函数:

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

我怎样才能更好地删除_at?

这不是干净的代码吗?

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

【问题讨论】:

    标签: laravel laravel-7 soft-delete


    【解决方案1】:

    你可以试试这个:

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

    【讨论】:

      【解决方案2】:

      你快到了:

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

      【讨论】:

        猜你喜欢
        • 2020-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多