2017-08-14 3 views
0

Aux prises avec des relations - Utilisation Laravel 5.4, j'ai trois tablesLaravel - inscriptions Nombre statut par événement

  • événement

    • id
    • Nom
    • autres champs ..
  • enregistrement

    • id
    • EVENT_ID
    • status_id
    • autres champs ...
  • état

    • id
    • Nom
    • autres champs ...

Statut Modèle

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

Modèle événement

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

Modèle d'enregistrement

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

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

et mon EventsController ressemble à ceci

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

    } 

j'ai juste besoin nombre le nombre de statuts que par l'événement, parce que j'ai différents statuts

  • New
  • Revu
  • Approuvé
  • Rejeté

    et je dois afficher chaque numéro d'état sur le modèle de la lame, par exemple

  • Nouveau (5)

  • Commenté (9)
  • approuvé (4)
  • Rejeté (10)

Comment puis-je accomplir cela en utilisant Eloquent?

Répondre

0

Ok, je réponds à ma propre question avec le aide de thiout, merci de donner des conseils.

Voici la solution:

$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; 

J'espère que cela aide quelqu'un d'autre!

Résultats

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

Cheers!

0

Vous pouvez utiliser DB comme

ajouter cette au-dessus de votre EventsController:

use DB; 

alors quelque chose comme:

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

    return $status; 

} 
+0

Comment puis-je compter le nombre de statuts selon cet événement ?? –

+0

Si chaque enregistrement a un statut, il suffit de compter le nombre d'enregistrements, si ce n'est pas le nombre de retour ($ status) de ma fonction –

+0

Mais le fait est que le statut peut être différent pour chacun. J'ai 4 types de statut - Nouveau, Revu, Accepté, Rejeté. J'ai besoin d'obtenir le numéro de chaque et afficher ce nombre selon l'événement –