#DUVIDA - Qual seria a melhor solução para minha aplicação Laravel? Adicionar uma nova coluna na tabela ou criar uma nova tabela apenas para isso?

Ola! Estava criando uma aplicação de E-Commerce, e cheguei na etapa de criar um "carrinho" para os usuários, e inicialmente decidi adicionar apenas uma nova coluna JSON na tabela dos usuários, em que adicionaria com o metodo PUT os IDs dos produtos, mas estou encarando certos erros que nao faço ideia de como solucionar. Portanto, estava pensando se não seria mais correto criar uma nova tabela apenas para o "carrinho", utilizando belongsTo para vincular cada "carrinho" com seu devido usuário. Gostaria muito de ver as opiniões da comunidade sobre qual seria o melhor método.

Caso o método de adicionar apenas uma nova coluna na tabela usuários seja escolhido, devo fazer uma postagem para tentar consertar os diversos erros que estou enfrentando.

Apenas para deixar explícito, o erro que estou enfrentando é no momento de atualizar a coluna "cart". Deixarei os códigos abaixo para o caso de alguém saber consertar.

Route:

Route::put('/products/show/cart/{id}', [BluketController::class, 'cart'])->middleware('auth');

Controller:

public function cart($id){
    $user = auth()->user();

    $user->cart->update($id);

    return redirect('/');
}

Erro: Call to a member function update() on string

Agradeço desde já.

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.

Beleza!!! Vou seguir por esse caminho! Valeu demais pelo comentário.

Fala, Pedro. Aparentemente o erro acontece porque "cart" é um atributo texto, e não uma entidade. O ideal seria uma tabela para uma manipulação mais adequada. No entanto, te pergunto. Por que criar um e-commerce com Laravel? É por motivos de estudo? Ou você está de fato criando um produto? Se for a segunda opção, não recomendo seguir por esse caminho, por efeitos práticos. Seria muito mais rápido, confiável e com maior manutenabilidade, usar plataformas que já resolveram esse problema no passado. A depender do seu cenário, recomendo inclusive um WordPress com Woocommerce.

Obrigado pela opinião!!! E sim, estou criando por motivos de estudo mesmo, recentemente terminei um curso sobre o framework e me foi recomendado tentar criar um e-commerce para praticar.
Que massa! Continue nesse pique que vai aprender muito. O que você fez aqui é o objetivo de estudar e aplicar, que é descobrir que algo não funciona e porque determinadas estratégias funcionam melhor que outras em alguns cenários e em outros nem tanto. Se tiver tempo, tente ver como esses problemas são resolvidos em outros Frameworks, por exemplo, Magento (veja a arquitetura dele no site oficial), ou procure no github e explore as opções. No caso do seu código o maior problema nem estava nele, e sim na abordagem, pois tu resolveria aquele PUT, se fizesse o tratamento do valor do valor do atributo. Mas tu veria na prática (se colocasse em produção) o tanto de gargalo que isso poderia gerar. Como disse, continue praticando e descobrindo o funciona e o que não funciona. Bons estudos ;)