我正在尝试制定最佳实践来计算平均出勤率。
我想在会员视图中显示此内容(html部分没有问题)
我有以下3个数据库
会员数据库
|id|first|last|..........
|1 |.....................
|2 |.....................
劳斯莱斯数据库
|id|roll_id|member_id|status|
|1 |1 |1 |P |
|2 |1 |2 |V |
|3 |2 |1 |A |
|4 |2 |2 |C |
Rollmappings数据库
|id|roll_date |roll_year|
|1 |2019-03-01|2019 |
|2 |2019-03-02|2019 |
我的会员模型中包含以下内容
public function roll()
{
return $this->hasMany('App\Roll');
}
我的Roll模型中有以下内容
public function rollmapping()
{
return $this->hasOne('App\Rollmapping', 'id','roll_id');
}
我想计算所有不等于“ A”的记录 因此,在上面的代码块中,成员1将需要向我展示50%的出席率,而成员2将向我显示100%的出席率。
我需要准备一些东西,当我们进入2020年时它将自动翻转 我的应用程序中也确实安装了Carbon Date
我在将year_roll
拉入卷选中时陷入了困境,我可以使用计数:
$rollyear = Rollmapping::lastest()->value('roll_year');
$totalweeks = DB::table('rollmappings')
->where('roll_year', '=', $rollyear)
->get()
->count();
但是我一直坚持使用roll_id
从卷中提取正确的记录,因为我只希望roll_id
具有当前年份的年月日。
谢谢
答案 0 :(得分:1)
如果我理解您的问题是对的,那么您应该可以使用whereHas
来获得所需的信息$count = Roll::whereHas('rollmapping', function ($query) {
$query->whereYear('roll_date', now()->year);
})->count();
如果您还希望排除状态不等于A的所有掷骰,那么您将获得类似的信息:
$count = Roll::whereHas('rollmapping', function ($query) {
$query->whereYear('roll_date', now()->year);
})
->where('status', '!=', 'A')
->count();