1
resposta

Como atualizar um valor no banco, subtraindo ou somando a quantidade antiga

Estou desenvolvendo uma API para um sistema de almoxarifado, e no método update eu preciso atualizar a quantidade do meu estoque/inventario (exemplo, a entrada tem 4 metros de madeira, na edição eu alterei para 3 metros, então eu removo do inventário 4 metros que seriam o valor anterior, e depois adiciono os 3 metros da edição), estou com dificuldade em como fazer para pegar este dado q foi inserido quando a minha entrada no inventario foi criado, uma parte do meu código:

public function update(EntradaUpdateFormRequest $request, $id)
{
    $entrada = Entrada::findOrFail($id);
    //tem bastante código nessa parte...
    //e abaixo a lógica de mexer na tabela do inventario...
    // lógica para atualizar ou adicionar a quantidade dos itens no inventario
                $inventario = Inventario::where('departamento_id','=',$entrada->departamento_id)
                                        ->where('local_id','=',$entrada->local_id)
                                        ->where('item_id','=',$entrada_items["item_id"])
                                        ->first();

                if ($inventario) {
                    $inventario->quantidade - //esse que é o maior obstáculo, acho que o esquema seria subtrair o total anterior, e aí acrescentar o total novo, porém como
                    //faço para mudar o valor que foi acrescentado quando este registro foi criado no metodo store.
                    $inventario->quantidade += $entrada_items["quantidade"];
                    $inventario->save();
                } else {
                    $inventario = new Inventario();
                    $inventario->departamento_id = $entrada->departamento_id;
                    $inventario->item_id = $entrada_items["item_id"];
                    $inventario->local_id = $entrada->local_id;
                    $inventario->quantidade = $entrada_items["quantidade"];
                    $inventario->qtd_alerta = 0;
                    $inventario->save();
                }
1 resposta

Olá, David! Tudo bem?

Peço desculpa pela demora para responder o seu tópico.

Para que você consiga coletar o dado que foi inserido, você deve utilizar a variável $request, pois a mesma é responsável por armazenar as informações passados pelo formulário e podem ser utilizadas dentro do método de requisição. Para entender um pouco melhor, deixarei o trecho da documentação do Laravel que trabalha exatamente esse ponto.

Além de que, existe uma maneira um pouco mais simples para adicionar ou subtrair o valor de certo dado da tabela. Para isso, o Laravel já disponibiliza dois métodos específicos para essas ações, sendo eles increment e decrement. Para mais informações de como utilizá-los, recomendo a leitura a baixo.

No mais, recomendo sempre ler a documentação oficial do Laravel! Ela é bem trabalhada e descritiva.

Espero ter lhe ajudado. Caso tenha mais dúvidas relacionados com este tópico, estarei à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software