[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Alan Sousa
Criador Alan Sousa 15/10/2020

Bom dia Carlos, tenho uma situação particular no meu sistema que desenvolvi de pedidos a algum tempo.

Ele funciona da seguinte forma:

Cliente informa os produtos desejados e ele tem a opção de modificar o valor de venda na hora da propria venda ou usar o valor padrão ja cadastrado no produto, e adicionar quantidade de itens desejado. A cada item selecionado ele registra os itens em uma grid na tela de pedido, isso tudo via JS com um array até ai tudo bem.

Ele registra essa venda no banco de dados certinho, porém existe uma regra que permite o usuário alterar o pedido, por se tratar de um delivery, o cliente desejar acrescentar um item a mais ou retirar um item, aqui entra o problema, na alteração deste pedido caso o usuário queira inserir um novo item já existente no pedido(por ex: pizza portuguesa, já existe, mas ele quer outra) na atual situação o usuário precisa excluir o item inserido no pedido(no caso a pizza portuguesa) e coloca-lo novamente, caso eu coloque a pizza portuguesa no pedido sem excluir o anterior, ao salvar o pedido ele sempre pega o ultimo item cadastrado ignorando o ja existente anteriormente.

Pelo que eu vi ele está pegando o id do produto e substituindo ele pelo ultimo. Estou usando o método sync.

Em minha visão ele deveria manter os itens anteriores mesmo que seja iguais e inserir os itens novos.

Este é o trecho de código que estou usando no método update:

$produtos = [];

        foreach($data['produtos_listagem_id'] as $i => $produto_id ){

          $qtde    = $data['produtos_qtde'][$i];

          $obsitem = $data['obsitem'][$i] != "null" ? $data['obsitem'][$i] : null;

          $prvenda = $data['prvenda'][$i];

          $produtos[$produto_id] = ['produto_id' => $produto_id,'qtde' => $qtde, 'obsitem' => $obsitem, 'prvenda' => $prvenda];

        }

        $pedido->produtos()->sync($produtos);

 

Agradeço a atenção, tenha um ótimo dia.

Manager Carlos Ferreira 15/10/2020

Olá, Alan!
Tudo bem?

Indico um caminho mais simples, é criar um model para a tabela pivô, e editar o registro especifico na tabela pivô.

A chance de ter erros será muito menor e a implementação será mais simples.

(https://laravel.com/docs/8.x/eloquent-relationships#defining-custom-intermediate-table-models)

Carlos Ferreira
Criador Alan Sousa 15/10/2020

Boa tarde, minha questão é que não queria modificar essa regra pois ela funciona bem com os métodos de criar e excluir, porém no sync() ele tem o comportamento de remover os indices na qual o produto_id ja existem, ex:

pizza portuguesa com id 1

pizza calabresa com id 2

Se eu atualizar o pedido na qual tem o produto com id 1 e eu adicionar um novo produto com o id 1, ele remove o antigo. 

Gostaria de saber se há uma alternativa para poder verificar se existe um produto com o id igual ao que eu esteja tentando adicionar, se possível deixar adicionar, caso contrário encontrar uma maneira de acrescentar +1 a quantidade do id já existene.

Estou apanhando nessa lógica.

Desculpe qualquer coisa, até mais!

Alan Sousa
Manager Carlos Ferreira 15/10/2020

Olá, Alan!

O sync no seu caso realmente não vai atender (porque ele deleta os registros e cria novamente os vinculos).

A alternativa mais simples e viável que enxergo para o seu projeto é alterar diretamente o registro na tabela pivô, com o model intermediate.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!