2016-06-06 5 views
0

Ich verwende SendGrid SMTP, um Mail über meine Site zu senden. Ich verwende auch den SendGrid-Ereignis-Webhook, um alle geöffneten/klickenden/unberechenbaren Daten aufzuzeichnen.Suchen Sendgrid eindeutig öffnet mit Laravel

SendGrid Tracks einzigartige öffnet auf ihrem internen Dashboard und ich möchte meine Benutzer die gleichen Informationen zeigen.

Schema

------------------------------------------ 
userId | emailId | msg_email  | event| 
------------------------------------------ 
    1 | 27898 | [email protected] | open | 

Grundsätzlich muss ich mit allen Datensätzen finden:

  1. Ereignis == "öffnen"

  2. wo userId == $ userId

  3. zählen distinct ms g_email für jede emailId.

Ich bin ganz fest, aber ich denke, die Art und Weise, diesen zu Ansatz ist es, eine Abfrage auszuführen, die alle E-Mails für die Benutzer-ID und mit Ereignis packt == „öffnen“. Gruppiere sie per EmailId.

$query = EmailStats::where('userId', '=', $userId) 
        ->where('event', '=', 'open') 
        ->groupBy('emailId') 
        ->get(); 

Dann Schleife durch jede Gruppe und greifen Sie die Anzahl der verschiedenen E-Mail-Adressen.

Ich kann nicht herausfinden, wie man durch jede "Gruppe" durchläuft, um die unterschiedliche E-Mail-Adresse zu finden.

Gibt es einen anderen Ansatz, den ich in Betracht ziehen sollte?

Antwort

0

Laravel hat eine Collection-Methode "Unique", die dies tut. Ziemlich einfach, nachdem ich es gefunden habe:

$query = EmailStats::where('userId', '=', $userId) 
        ->where('event', '=', 'open') 
        ->groupBy('emailId') 
        ->get(); 


    $unique = $query->unique(function ($item) { 
     return $item['emailId'].$item['msg_email']; 
    });