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.