首页 > 解决方案 > Laravel - how to select items by calculated deadline date

问题描述

My model has a "deadline" date which is 15 days after it's creation date.

So I'm trying to select items by filtering this date.

<select name="deadline">
  <option value="">any</option>
  <option value="10">less than 10 days</option>
  <option value="6" >less than 6 days</option>
  <option value="3" >less than 3 days</option>
  <option value="0" >delayed</option>
</select>

controller

$deadline_total_days  = 15;
$filter_deadline_days = request()->get('deadline');

$q->whereDate('created_at', '<=', Carbon::now()
                                    ->addDays($filter_deadline_days)
                                    ->subDays($deadline_total_days)
                                    );
...

This is not working. It always brings all items from database.

Am I doing something wrong?

标签: phpmysqllaravel

解决方案


这是一个逻辑问题,通过以下方式解决:

$q->whereRaw('DATEDIFF(DATE_ADD(created_at, INTERVAL '.$deadline_total_days.' DAY), CURDATE()) <= '.$filter_deadline_days.' ');

推荐阅读