Tengo la tarea de aplicar un descuento, en cada décimo pedido para el cliente a partir del comienzo de su suscripción, los datos provienen de una llamada API fuera de Laravel.
p.ej
[ [ order_id: xxxxx, details: [ ], customer_id: xxxxx ], [ order_id: xxxxx, details: [ ], customer_id: xxxxx ], ]El criterio para que el pedido sea incluido en el conteo, es tener un estado de ÉXITO. Lo que hice fue recorrer todos los pedidos que tienen un estado de ÉXITO y crear un contador a partir de 1, y si el contador llega a 10, restableceré el contador nuevamente al principio, hasta que haya recorrido todos los pedidos y el último número que se registró es el N-ésimo pedido actual del cliente, por lo que si el N-ésimo pedido actual es 9, el siguiente pedido se aplicaría con un descuento.
Sin embargo, esto parece ineficiente y si el cliente tiene muchos pedidos, el código tardará un tiempo en recorrer y pasar por todos los pedidos, para obtener la posición N-ésima del pedido actualmente para el cliente. ¿Existe una fórmula para obtener cuál es la posición actual del orden N? ¿O puedo usar colecciones, fragmentar la matriz en 10 y obtener el último grupo y desde allí simplemente hacer un bucle para obtener la posición N de la última orden? Cualquier consejo sería apreciado. Gracias.
Editar debido a que no está en la base de datos sino en una respuesta de API.
$applicable_for_discount = collect($data)->filter(function ($item) { return $item['successful']; })->chunk(9)->last()->count() === 9;