2017-08-14 24 views
0

mit Beziehungen Struggling - Mit Laravel 5.4, ich habe drei TabellenLaravel - Anzahl Registrierungen Status pro Ereignis

  • Ereignis

    • id
    • Namen
    • andere Bereiche ..
  • Registrierung

    • id
    • event_id
    • status_id
    • anderen Bereichen ...
  • Status

    • id
    • Name
    • andere Bereiche ...

Statusmodell

public function registrations() 
    { 
     return $this->hasMany(Registration::class); 
    } 

Ereignismodell

public function registrations() 
    { 
     return $this->hasMany(Registration::class); 
    } 

Registrierung Modell

public function statuses() 
    { 
     return $this->belongsTo(Status::class, 'status_id'); 
    } 

    public function events() 
    { 
     return $this->belongsTo(Event::class, 'event_id'); 
    } 

und meine EventsController sieht aus wie dieses

public function findRegistrations($id) 
    { 
     $viewEvent = Event::find($id)->registrations; 
     return view('events.details', compact('viewEvent')); 

    } 

ich Zahl brauchen nur die Anzahl der Zustände gemäß dem Ereignis, weil ich

  • New
  • verschiedene Status haben
  • Bewertet
  • Zugelassen
  • Abgelehnt

    und ich brauche jede Statusnummer auf Blade-Vorlage anzuzeigen, zum Beispiel

  • Neu (5)

  • Bewertet (9)
  • Approved (4)
  • Abgelehnt (10)

Wie erreiche ich das mit Eloquent?

Antwort

0

Ok, ich bin meine eigene Frage mit der Beantwortung Hilfe von thiout, danke für Hinweise. Hier

ist die Lösung:

$status = Status::select([ 
     'statuses.id', 
     'statuses.statusName', 
     \DB::raw('count(registration.status_id) as count') 
    ])->join('registration','registration.status_id','=','statuses.id') 
     ->where('event_id', '=', $id) 
     ->groupBy('registration.status_id') 
     ->get(); 
    return $status; 

Ich hoffe, dass es jemand anderes hilft!

Ergebnisse

[ 
    { 
    id: 1, 
    statusName: "NEW", 
    count: 10 
    }, 
{ 
    id: 2, 
    statusName: "REVIEWED", 
    count: 14 
}, 
{ 
id: 3, 
statusName: "APPROVED", 
count: 12 
}, 
{ 
id: 4, 
statusName: "REJECTED", 
count: 3 
} 
] 

Prost!

0

Sie könnten DB verwenden wie

diese auf Ihre EventsController hinzu:

use DB; 

dann so etwas wie:

public function getStatusForEvent($id) 
{ 
    $status = DB::table('status') 
     ->join('registrations', 'registrations.status_id', '=', 'status.id') 
     ->where('registrations.event_id', '=', $id) 
     ->get(); 

    return $status; 

} 
+0

Wie zähle ich die Anzahl der Status nach diesem Ereignis? –

+0

Wenn jede Registrierung einen Status hat, dann zählen Sie einfach die Anzahl der Registrierungen, wenn nicht die Anzahl der Rückgaben ($ status) von meiner Funktion –

+0

Aber die Sache ist, Status kann für jeden unterschiedlich sein. Ich habe 4 Arten von Status - Neu, Überprüft, Angenommen, Abgelehnt. Ich muss die Nummer von jedem erhalten und diese Zahl gemäß dem Ereignis anzeigen –

Verwandte Themen