Laravel - 计算每个活动的注册状态

时间:2017-08-14 17:22:05

标签: php laravel-5.4 laravel-eloquent

苦苦挣扎 - 使用Laravel 5.4,我有三个表

  • 事件

    • 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)

如何使用Eloquent实现这一目标?

2 个答案:

答案 0 :(得分:0)

你可以使用像

这样的数据库

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

}

答案 1 :(得分:0)

好的,我正在帮助我回答我自己的问题,谢谢你的提示。

以下是解决方案:

$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
 }
]

干杯!

相关问题