#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.
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.