【问题标题】:Cart still showing the product which has been deleted Laravel购物车仍然显示已删除的产品 Laravel
【发布时间】:2020-02-27 23:53:10
【问题描述】:

我有这个功能,允许用户将产品添加到购物车,但如果产品在管理面板中被删除,它仍然显示在购物车中,关于如何删除已在管理仪表板中删除的购物车中的产品的任何想法?

所以我尝试了这个来检查 id 是否存在,我得到了一个错误Call to a member function isEmpty() on integer

结帐控制器

   public function store(Request $request)
 {
    foreach(session('cart')  as $productId =>$item);
    $product = product::find($productId);
    if(!$productId->isEmpty())
    //Insert into orders table
    $order = Order::create([
        'shipping_email' => $request->email,
        'shipping_name' => $request->name,
        'shipping_city' => $request->city,
         'user_id'=> auth()->user()->id,

    ]);

    //Insert into order product table
    if ($order) {
        $total = 0;
        foreach(session('cart')  as $productId =>$item) {
           if (empty($item)) {
               continue;
           }
           $product = product::find($productId);
           OrderProduct::create([
            'order_id' => $order->id ?? null,
            'product_id' => $productId,
           // $products=DB::table('products')->where('id',$id)->get();
            'quantity' => $item['quantity'],
            'Subtotal' =>$item['price'] * $item['quantity'],
            'total' => $total += $item['price'] * $item['quantity'],
            'price' => $product->price,
            'name' => $product->name,
            'info' => $product->info,
        ]);

【问题讨论】:

  • 删除/修改某人会话中的产品不会更新它,除非您调用数据库以检查所述产品是否存在/是否仍然相同。会话被设计为数据的快照,本质上并不知道变化。
  • 如何调用数据库? @蒂姆刘易斯
  • 这不是如何做的问题,而是何时的问题;如果产品被删除,它可能不会出现在店面(无论您在哪里展示产品),因此很难进行交叉引用。通常,您在结帐时处理此问题;在保存订单之前,检查产品、列出价格、通知用户产品是否仍然可用等。
  • 很好,我明白你的意思,我之前尝试过一些东西,但我得到了一个错误我可以用结帐控制器更新问题吗? @蒂姆刘易斯
  • 当然!对于 Stackoverflow 上的答案,它的概念可能有点宽泛,但如果您可以展示您的尝试以及您遇到的任何错误,那将是向前迈出的一大步。

标签: php laravel laravel-5


【解决方案1】:

您必须在每次删除操作后更新存储在会话中的值。在 laravel(根据他们的官方文档)中,您可以按如下方式执行此操作。

    $request->session()->forget('removed_product_id',$id);

或者如果你想使用会话外观

    Session::forget('removed_product_id',$id);

在每次删除操作后调用此语句。您可以在删除控制器函数中调用它们。

【讨论】:

  • 我在哪里把Session::forget('removed_product_id'); 放在产品控制器删除方法中还是像问题@Hussain Abdullah 中的结帐控制器中
  • 在产品控制器删除方法中是。并将“removed_product_id”替换为您在创建会话时使用的名称。并且还将 $id 分配给已删除产品的 id。
  • 这行不通。 session()->forget() 只影响当前会话。如果我作为管理员删除产品,session()->forget() 不会影响任何其他用户的会话。我的会话将更新,但只有我的会话。
  • @TimLewis 你是对的。它仅适用于管理员会话。我忘记了其他用户。
  • 我可能会检查其中一个产品是否不存在,它应该返回购物车,说其中一个产品已被删除,但用户不知道是哪个产品,所以我如何在重定向时删除该产品回到购物车或任何其他想法@Tim Lewis
【解决方案2】:

您从管理面板中删除了产品,但不更新阵列中仍有该产品的会话。尝试在会话中仅获取产品的 id,并在控制器中使用此 id 从数据库获取数据,然后再进行查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2022-08-23
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多