Laravel - 如何从数据库中获取最近5个日期

时间:2018-02-05 07:08:13

标签: php mysql laravel laravel-5.5 laravel-eloquent

我有一个模型ImportantDate架构如下

Schema::create('important_dates', function (Blueprint $table) {
    $table->increments('id');
    $table->date('date');
    $table->text('description');
    $table->timestamps();
    $table->softDeletes();
});

我想得到:

1)从当前日期(今天)和

开始的最后五个日期

2)从当前日期(今天)开始的下一个五天

示例数据:

id    Date          description
1     2017-12-20    some description
2     2017-12-25    some description
3     2018-01-02    some description
4     2018-01-28    some description
5     2018-02-02    some description
6     2018-02-12    some description
7     2018-02-18    some description
8     2018-02-28    some description
9     2018-03-02    some description
10    2018-03-12    some description

在我ImportantDatesController.php我尝试了一个查询,显示当前日期的最近日期,但我需要最近5个日期和接下来的5个日期。

public function index() 
{
    $upcoming_dates = ImportantDate::orderByRaw(' abs( timestampdiff(second, current_timestamp, created_at)) asc ')
                                    ->limit(5)
                                    ->get();

    $recent_dates = ImportantDate::orderByRaw(' abs( timestampdiff(second, current_timestamp, created_at)) dsc ')
                                    ->limit(5)
                                    ->get();

    return view('pages.dashboard', compact('upcoming_dates','recent_dates'));
}

期待急需的帮助。

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以where()使用compare条款upcoming您的日期为previous日期或orderBy()日期。然后,您可以使用$upcoming_dates = ImportantDate::where('date','>', date('Y-m-d'))->orderBy('date') ->limit(5) ->get(); $recent_dates = ImportantDate::where('date','<', date('Y-m-d'))->orderBy('date', 'DESC') ->limit(5) ->get(); 根据您的日期获取最新的5个。

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

答案 1 :(得分:1)

DATE('Y-m-d')将以给定格式提供当前日期。如果您需要获取最新的当前日期,可以使用添加>=<=

$upcoming_dates = ImportantDate::where('date' , '>', DATE('Y-m-d'))
                    ->orderBy('id', asc)
                    ->limit(5)
                    ->get();

$recent_dates = ImportantDate::where('date', '<', DATE('Y-m-d'))
                    ->orderBy('id', desc)
                    ->limit(5)
                    ->get();

答案 2 :(得分:1)

SELECT * 
FROM table
WHERE id IN (SELECT id FROM table WHERE datetime = (SELECT MAX(datetime) FROM table))
ORDER BY id DESC
LIMIT 1