Laravel:选择当月不付款的学生

时间:2019-03-18 03:34:34

标签: php database laravel eloquent query-builder

我想列出当月未付款或从未付款的学生名单。 有可能用一个查询生成器或雄辩的功能吗? 使用下面的代码,我可以做与我想要的相反的事情:/

bray1<-structure(list(`Andropogon virginicus` = c(0, 0, 0, 0, 2.7, 31.5333333333333, 0, 0, 0, 0, 0, 0), `Oenothera parviflora` = c(61.6,30.3333333333333, 7.53333333333333, 0, 11.7333333333333, 0, 0, 0,75.4, 0, 0, 0), `Lespedeza cuneata` = c(0, 0, 0, 0, 0, 46.7333333333333, 0, 0, 3, 0, 0, 0), `Lespedeza pilosa` = c(0, 1.93333333333333, 0,  0, 1.73333333333333, 0, 0, 0, 0, 1.7, 0, 0), `Chamaesyce maculata` = c(0, 0, 0,4.733333333, 0, 0, 0, 0, 0, 0, 0, 0), `Chamaesyce nutans` = c(0,0, 0, 0, 0,0, 0.166666666666667, 0, 0, 0, 0, 0), `Bidens frondosa` = c(0, 0, 0,1.76666666666667, 1.03333333333333, 3.23333333333333, 0, 0, 0, 0, 0, 0), `Erigeron annuus` = c(0, 0, 0, 0, 0.4, 0, 0, 0, 0, 0, 0, 0), `Erigeron canadensis` = c(0, 0, 0, 0, 0, 4.33333333333333, 0, 0, 9.1, 2.066666667, 0,0), `Equisetum arvense` = c(46, 62.7333333333333, 0, 1.66666666666667, 0, 0.533333333333333, 0, 0, 0, 0, 0, 0),     `Erigeron sumatrensis` = c(0, 0, 0, 0, 0, 16.4333333333333,     0, 4, 0, 6.633333333, 0, 0), `Hypochaeris radicata` = c(0,     3.76666666666667, 116.6, 0, 5.033333333, 9.76666666666667,     29, 0, 23.1666666666667, 82.16666667, 0, 0), `Lactuca indica` = c(10.26666667,     0, 1.566666667, 120.1333333, 44.36666667, 42.0333333333333,     0, 14.2333333333333, 0, 0, 14.36666667, 22.2), `Solidago altissima` = c(0,     1.06666666666667, 33.93333333, 0, 0, 0, 0, 0, 0, 6.6, 0,     0), `Sonchus asper` = c(0, 35.9, 0, 0, 0, 7.46666666666667, 
29.6666666666667, 4.96666666666667, 0, 0, 0.23, 2.933333333    )), .Names = c("Andropogon virginicus", "Oenothera parviflora", "Lespedeza cuneata", "Lespedeza pilosa", "Chamaesyce maculata", "Chamaesyce nutans", "Bidens frondosa", "Erigeron annuus", "Erigeron canadensis", "Equisetum arvense", "Erigeron sumatrensis", "Hypochaeris radicata", "Lactuca indica", "Solidago altissima", "Sonchus asper"), row.names = c(NA, -12L), class = c("tbl_df", "tbl", "data.frame"))

4 个答案:

答案 0 :(得分:0)

我不知道您在这里传递了什么价值。

$today->month

您不必在今天的$ day->月中通过确切的月份

请尝试

$indebted = DB::table('students')->where('students.active',1)   
            ->leftJoin('payments', 'students.id', '=', 'payments.user_id')
            ->whereMonth('payments.created_at','=', 06)
            ->get();

答案 1 :(得分:0)

以下是在当前月份和年份付款的学生ID

$payments= DB::table('payments')
            ->whereMonth('created_at',date('m'))
            ->whereYear('created_at', date('Y'))
            ->pluck('user_id')->all();

使用 whereNotIn('id',[付款的学生ID])

$students = DB::table('students')
            ->whereNotIn('id',$payments)
            ->get();

答案 2 :(得分:0)

您可以在这种情况下使用Raw SQL 我假设您正在使用mysql数据库

$sql=SELECT * from students s LEFT JOIN payments p ON s.id=p.user_id
WHERE s.active=1 AND (p.created_at is NULL or MONTH(MAX(p.created_at) < MONTH(CURRENT_DATE()))  )

$students = DB::connection('mysql')->select( DB::raw(" $sql"));
foreach($students as $aStudent){
     ...
     ....
}

答案 3 :(得分:0)

您可以找到本月没有付款的学生

$students = App\student::whereDoesntHave('payments', function (Builder $query) {
      $query->whereMonth('payments.created_at',$today->month);
})->where('active',1)->get();