Eu faria da seguinte forma:
Criaria um modelo Cart (com timestamps e um campo expires_at) que teria as seguintes relações: belongsTo(User) e belongsToMany(Products)->withPivot('quantity').
Desta forma você consegue guardar um histórico dos carrinhos do cliente. O carrinho teria uma validade como na maioria das lojas, então vc procura sempre o ultimo carrinho não expirado. Se não houver, você cria um novo. Ao adicionar um item, reseta a validade do carrinho.