WhereIN数据用于显示结果的计算

时间:2019-05-21 06:27:02

标签: laravel

我正在尝试制定最佳实践来计算平均出勤率。

我想在会员视图中显示此内容(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具有当前年份的年月日。

谢谢

1 个答案:

答案 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();
相关问题