【问题标题】:How to add every item as a new record without updating in laravel in cart如何将每个项目添加为新记录而不在购物车中的 laravel 中更新
【发布时间】:2021-07-31 05:01:09
【问题描述】:

我有一个关于 Laravel 的问题,我是 Laravel 的新手。

我正在创建一个包含多个产品的网站,并且每个产品都可以定制。每次我将相同的产品添加到购物车时,它都会覆盖先前具有相同产品 ID 的记录(如预期的那样)。在我的情况下,我想要购物车中的新项目,每次用户将产品添加到他们的购物车时,即使他们再次添加相同的项目。我怎样才能做到这一点?

if(request()) {              
    $cart = session()->get('cart');
    $cart[request()->product_id][(count(session()->get('cart')))] = [
        "name" => request()->name,
        "tel" => request()->tel,
        "email" => request()->email,
        "linkedin" => request()->linkedin,
        "slogan" => request()->slogan,
        "logo" => request()->logo,
        "qty" => request()->qty,
        "product_id" => request()->product_id,
    ]; session()->put('cart', $cart);

我无法实现,如果 product_id 相同,我的记录将覆盖。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    不要使用产品 ID 作为数组键。 你可以这样做

    //Check if cart key exist in sessiom
    if(Session::has('cart')) {
        //get cart and push the new product and put in cart session
        $cart = Session::get('cart'); 
        $cart->push($this->productToAddCart());
        Session::put('cart', $cart);     
    }
    else {
        $cart = Session::put('cart', collect($this->productToAddCart()));
    }
    

    并创建函数以获取返回购物车所需值的产品数组

    protected function productToAddCart() {
        return [
            'product_id' => request()->product_id,
            'name' => request()->product_name,
        
            ..add your other required fields
        ];
    }
    

    使用 Laravel Collection 创建的购物车,因此您可以在其上使用 Eloquent Query Builder。

    $cart = Session::get('cart'); 
    $cart->all(); // like this
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 2023-04-08
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多