laravel会议

时间:2018-05-29 22:54:53

标签: laravel session laravel-5.6

class ControlController extends Controller
{
    public function anyadirCarrito($id, $quan) {
        $productoCarrito = (object)array(
            'id' =>$id,
            'cantidad' => $quan,
        );
        \Session::push('cart', $productoCarrito);
        return \Session::get('cart');
    }
}

我试图调用此函数来存储数据,但每次调用它时,它都会覆盖数据,我希望它将它存储在另一个数据旁边,但它会覆盖它。如何将其与另一个存储?如果我给他一个身份证,我怎么能删除它?

1 个答案:

答案 0 :(得分:2)

Laravel Session以关键/价值为基础运作。因此,当您push另一个项目到密钥cart时,您将覆盖推送上一个值的相同密钥。

如果您希望维护cart,并添加了所有已添加的产品,则首先需要检索该值,然后附加新产品。例如:

public function addProduct($id, $quantity) {
    // Get cart from session
    $cart = session('cart', []);

    // Increment existing product quantity, or add product to cart
    if (array_key_exists($id, $cart)) {
        $cart[$id]->quantity += $quantity;
    } else {
        $cart[$id] = (object) compact('id', 'quantity');
    }

    // Set cart in session
    session(compact('cart'));

    return $cart;
}

public function removeProduct($id) {
    // Get cart from session
    $cart = session('cart', []);

    // Remove product from cart
    unset($cart[$id]);

    // Set cart in session
    session(compact('cart'));

    return $cart;
}