Update em múltiplos itens
[Finalizado Pelo Aluno]
Olá Carlos,
Vou tentar explicar minha necessidade:
Na minha API tenho algumas tabelas que possuem um campo 'order' que serve para ordenar os itens em uma ordem específica, no front pretendo utilizar um plugin para modificar a ordem dos itens com drag and drop e após alterar preciso pegar a nova ordem de todos os itens e atualizar na API. Então teria que chamar uma requisição PUT para cada item informando o paramentro order, correto?
Pensei em montar todas as requisições em um array com um forEach e utilizar o método axios.all();
Ex.:
let requests = [
axios.put('https://projeto/api/products/1', {'order': 2})
axios.put('https://projeto/api/products/2', {'order': 3})
axios.put('https://projeto/api/products/3', {'order': 1})
]
axios.all([$requests])
.then(response => console.log(response))
.catch(errors => console.log(errors))
Seria essa a melhor forma ou existe outro método melhor?
E utilizando vuex, como ficaria? Coloco toda essa lógica dentro de uma action 'updateProductsOrder' e passaria um array de objetos, com o 'id' e o 'order' de cada item como parâmetro?
Ou ainda será que seria mais interessante fazer essa lógica na API, com um endpoint 'https://projeto/api/products/reorder' que recebe um array de arrays contendo o 'id' e 'order' como parâmetro e fazer o update por lá, para ter menos requisições?
Olá, Elizandro!
Tudo bem?
O ideal seria pegar diretamente no frontend um array com o ID do registro + Ordem (nova ordem), porque assim você envia apenas uma única requisição com um array com a ordem atualizada de cada produto, e na API basta atualizar os registros e está ok.
O array criado no frontend precisaria ter esse formato:
let ordes = [
{
product: 1,
order: 2
},
{
product: 2,
order: 3
},
{
product: 3,
order: 1
},
{
product: 4,
order: 2
}
]
Entendeu a ideia amigo?
Olá Carlos,
Acho que entendi, para isso eu criaria uma nova rota na API do tipo PUT para receber esse array, que por sua vez vai enviar os dados da requisição para um método 'reorder' no controlador, certo?
Ex.: 'https://projeto/api/products/reorder'
Exatamente amigo.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!