我有任务表以及日期列'提醒日期'到期日期'。我需要在今天引用之前完成所有任务。我对查询知之甚少,所以ORM会更好。
我试过了,
$today = date("Y-m-d");
$availTasks = Task::whereRaw($today.' between rem_date and due_date')->get();
echo ($availTasks);
答案 0 :(得分:3)
首先,要正确使用日期字符串,应该是:
$availTasks = Task::whereRaw('? between rem_date and due_date', [$today])->get();
如果您的rem_date
和due_date
列为DATE
类型,则应该有效。但是,如果它们是DATETIME
类型,它将无效。你应该使用:
$availTasks = Task::whereRaw('? between DATE(rem_date) and DATE(due_date)', [$today])->get();
答案 1 :(得分:2)
使用闭包的化合物怎么样:
$dateToday = date('Y-m-d H:i:s');
$query = Task::where(function ($query) use ($dateToday){
$query->where('rem_date', '>=', $dateToday);
$query->where('due_date', '<', $dateToday);
});
echo $query->get();
同样在使用whereRaw时,您应始终绑定参数,因为它可以成为注射矢量。我知道参数只是你的情况下的日期,但这只是一个很好的做法。见先生。 Nabiałek回答这个问题。