Laravel - 每个事件

问题描述:

人际关系挣扎伯爵的注册状态 - 使用Laravel 5.4,我有三个表Laravel - 每个事件

  • 事件

    • ID
    • 等领域..
  • 注册

    • ID
    • EVENT_ID
    • STATUS_ID
    • 等领域...
  • 状态

    • ID
    • 等领域...

状态模式

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

事件模型

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

注册模式

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

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

和我EventsController看起来像这样

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

    } 

我只需要计数状态为每个事件的数量,因为我有不同的状态

  • 评论
  • 已批准
  • 拒绝

    和我需要显示对叶片模板中的每个状态号,例如

  • 新(5)

  • 评价(9)
  • 核准(4)
  • 被拒绝(10)

我该如何使用雄辩?

好吧,我回答我自己的问题硫铁矿的帮助,感谢提供暗示。

这里是解决方案:

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

我希望它可以帮助别人!

结果

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

干杯!

您可以使用DB像

您EventsController的顶部添加此:

use DB; 

则是这样的:

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

    return $status; 

} 
+0

如何计算每个事件的状态数? –

+0

如果每个注册都有一个状态,那么只需计算注册数量,如果不是从我的函数 –

+0

返回计数($状态)但事情是,每个状态可能会有所不同。我有四种类型的状态 - 新建,已审核,已接受,已拒绝。我需要获取每个事件的数量并根据事件显示该数字 –