我想只获得当周星期一到星期五的记录,但我很难思考和研究如何做到的方法,我在互联网上找到了一些方法,但它很难了解像我这样的新手,所以这是我的代码:
$myquery=DB::table('attendances')
->leftJoin('employees', 'attendances.user_id', '=', 'employees.id')
->where('user_id', '=', $employee->id)
//I want to do something like this one
->WHERE WEEK(`date`) = WEEK(NOW()
->orderBy('attendances.date','asc')->get();
我实现了一些像这样的答案
$myquery=DB::table('attendances')
->leftJoin('employees', 'attendances.user_id', '=', 'employees.id')
->where("WEEKOFYEAR(`date`)", "=", "WEEKOFYEAR(NOW())")
->where('user_id', '=', $employee->id)
->orderBy('attendances.logon','asc')->get();
答案 0 :(得分:3)
您可以使用whereBetween
和两个Carbon
日期实例:
->whereBetween('date', [
Carbon\Carbon::parse('last monday')->startOfDay(),
Carbon\Carbon::parse('next friday')->endOfDay(),
])
如果要查找当月的所有记录,请使用:
->whereBetween('date', [
Carbon\Carbon::now()->startOfMonth(),
Carbon\Carbon::now()->endOfMonth(),
])
答案 1 :(得分:0)
您需要使用WEEKOFYEAR()
而不只是WEEK
,它会获得一年中的当前周指数。因此,同一周的两个日期将返回相同的WEEKOFYEAR
。在普通的SQL中,它看起来像:
... WHERE WEEKOFYEAR(`date`) = WEEKOFYEAR(NOW())
在laravel中:
->where("WEEKOFYEAR(`date`)", "=", "WEEKOFYEAR(NOW())")
答案 2 :(得分:0)
我尝试像
这样的东西 ->where('WEEK(FROM_UNIXTIME(`date`))', '=', 'WEEK(NOW())')
->where('DAYOFWEEK(FROM_UNIXTIME(`date`))', '>=', 2)
->where('DAYOFWEEK(FROM_UNIXTIME(`date`))', '<=', 6)
答案 3 :(得分:0)
获取当周的数据,不包括星期六和星期日:
$query->where(DB::Raw('week(date)'), '=', Carbon::now()->weekOfYear)
->where(function($query){
return $query->where(DB::Raw('day(date)'),'<>',Carbon::SUNDAY)
->orWhere(DB::Raw('day(date)'), '<>',Carbon::SATURDAY); });
答案 4 :(得分:0)