Esta pergunta é tão antiga quanto a pergunta se a galinha ou ovo veio primeiro.
Então, salvar no banco de dados ou na sessão e por quê?
A resposta é simples. Banco.
Vamos dizer que você tenha uma classe para gerenciar o carrinho de compras e já tem um método para calcular o preço do pedido. Algo parecido como:
class Cart { /** * @var float */ private $totalPrice; /** * @return float */ public function getTotalPrice() { return $this->totalPrice; } }
Então, esta mesma classe podes usar no carrinho, para mostrar o histórico de compras, para apresentar a venda, para enviar o e-mail com o pedido, e aqui para gerenciar os itens quando o seu cliente esta comprando. Ao adicionar um item ao carrinho, podes simplesmente chamar o $cart->getTotalPrice()
que já tens o preço total.
Não... Imagina que seu cliente pede, após um mês sistema no ar (sim, acontece todo dia, e tens que estar sempre esperando por isso), um sistema de cupons de desconto e você precisa atualizar o carrinho. Então se você salva o carrinho sessão, tens dois locais para alterar. Se estas no banco, só a classe precisa ser alterado.
class Cart { /** * @var float */ private $totalPrice; /** * @var float */ private $discountAmount; /** * @return float */ public function getTotalPrice() { return $this->totalPrice - $this->discountAmount; } /** * @return float */ public function getDiscountAmount() { return $this->discountAmount; } /** * @param float $discountAmount */ public function setDiscountAmount( $discountAmount ) { $this->discountAmount = $discountAmount; } }
A complexidade do seu código vai influenciar na quantidade de bugs que seu sistema tem. Então quanto menos códigos, menos bugs.
E não se esqueça que sites mais rápidos criar usuários felizes, e sites mais rápidos aumenta as chances da venda ser concretizada e a hospedagem é um dos fatores também.