es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualización de recuento solo en notificaciones de base de datos de Laravel

Tengo una aplicación construida en Laravel donde envía notificaciones a los usuarios.

Por ejemplo, cuando se crea una nueva publicación, envía notificaciones a varios usuarios basado en algunas condiciones, el problema al que me enfrento es cuando se crean múltiples publicaciones en un corto período de tiempo, por ejemplo, 30 minutos. No quiero que el usuario reciba muchas notificaciones, solo quiero actualizar el contador en la última notificación.

Pero necesito evitar la creación de una nueva notificación cuando actualizo la última notificación.

Esto es lo que he escrito.

public function toDatabase($notifiable): array
    $count = 1;
    if($notification = $notifiable->notifications()->where('data->search', $this->search->id)
        ->where('updated_at', '>=', now()->subMinutes(30))
        ->first()) {
        $count = isset($notification->data['count']) ? $notification->data['count'] + 1 : 1;
        $notification->update([
            'data' => [
                'content' => [
                    'en' => "{$count} nuevas publicaciones coinciden con tu búsqueda guardada {$this->search->title}, Presiona aquí para ver más.",
                ],
                'count' => $count
            ]
        ]);
    }
    return [
        'content' => [
            'en' => "{$count} nueva publicación coincide con tu búsqueda guardada {$this->search->title}, Presiona aquí para ver más.",
        ],
        'count' => $count,
        'search' => $this->search->id,
        'parameters' => $this->search->parameters
    ];
}

¿Cómo se puede evitar que el código llegue al return []?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar que el código llegue a retornar [], simplemente puedes añadir una declaración else después de la declaración if para crear una nueva notificación si no existe ninguna notificación previa en los últimos 30 minutos. Aquí tienes una versión actualizada del código:

    public function toDatabase($notifiable): array
    {
        $count = 1;
        if ($notification = $notifiable->notifications()->where('data->search', $this->search->id)
            ->where('updated_at', '>=', now()->subMinutes(30))
            ->first()) {
            $count = isset($notification->data['count']) ? $notification->data['count'] + 1 : 1;
            $notification->update([
                'data' => [
                    'content' => [
                        'en' => "{$count} nuevos mensajes coinciden con tu búsqueda guardada {$this->search->title}. Presiona aquí para ver más.",
                    ],
                    'count' => $count
                ]
            ]);
        } else {
            $notifiable->notify(new NewPostNotification($this->search));
        }
    
        return [
            'content' => [
                'en' => "{$count} nuevo mensaje coincide con tu búsqueda guardada {$this->search->title}. Presiona aquí para ver más.",
            ],
            'count' => $count,
            'search' => $this->search->id,
            'parameters' => $this->search->parameters
        ];
    }
    

    La declaración else crea una nueva notificación utilizando la clase NewPostNotification (asumiendo que la hayas definido), la cual encapsula la lógica para crear una nueva notificación.

Comments are closed.