in

Cómo detener la ejecución de la función dos veces en php laravel

Tengo un fragmento de código PHP que quiero que se ejecute una vez por vez.
Sin embargo, veo que se puede ejecutar dos veces y esto está provocando actualizaciones dobles en la base de datos, lo que no es deseable.

NOTA: Llamo a la función a través de un evento cron externo cada 1 minuto.
Tengo más de 5000 registros pero quiero actualizarlos en 100s.
¿Cuál es la mejor manera de implementar esto?

Llamo a https://example.com/cron y ejecuta esta función

DB::transaction(function() {
    $events = Event::where('status', 'ACTIVE')->take(100)->get();
    foreach ($events as $key => $event) {
        if(Log::where('event_id', $event->id)->exists()){
            $details = Detail::where('event_id', $event->id)->first();
            if($details->status == 1){
                // update details
                DB::transaction(function () use($event, $details) {
                    $value = $event->value+$details->value;
                    $event->update('status', 'INACTIVE');
                    $event->user->increment('count', $value);
                }, 5);
            }
        }
    }
}, 5);

El problema es que en la próxima ejecución, el número de usuarios se duplica cada vez que llamo al punto final manualmente. Pero creo que el valor de estado debería estar inactivo y que la función debería bloquearse antes de realizar la próxima llamada. Estoy confundido y no entiendo por qué dos llamadas simultáneas tendrán acceso a la mesa.

0

¿Te ayudó la respuesta?

Subscribirse
Notificar por
guest
0 Comentarios
Inline Feedbacks
Ver todas las Respuestas

¿Cuántos enteros $n$ mayores que $2$ hay tales que la medida en grados de cada ángulo interior de un $n$-ágono regular es un entero par?

PLANO QUE CONTIENE EL EJE PRINCIPAL DE UNA LENTE