如何检查日期字段是否过期(Laravel / Lumen)

时间:2018-02-14 02:41:18

标签: php laravel datetime timestamp compare

我有一个名为事件和事件的表到期。如果他们的日期和时间到了,我如何检查我的控制器,如果该事件时间到了,来自和的日期时间字段是向上我想要将过期的字段设置为1

public function up()
{
Schema::create(‘club_events’, function (Blueprint $table) {
$table->increments(‘id’);
$table->string(‘event_name’);
$table->string(‘description’);
$table->boolean(‘special_events’);
$table->decimal(‘event_price’);
$table->dateTime(‘from’)->nullable();
$table->dateTime(‘to’)->nullabe();
$table->boolean(‘expired’)->nullable();

$table->integer(‘club_id’)->unsigned();
$table->timestamps();

$table->foreign(‘club_id’)
->references(‘id’)->on(‘club’)
->onDelete(‘cascade’);

});
}

2 个答案:

答案 0 :(得分:1)

您可以将其与当前日期时间进行比较,如:

if (now()->gte($clubEvent->to)) {
    // the event is expired
} else {
    // not expired
}

以下是Carbon comparison函数。

更新过期的字段,如:

$clubEvent->update([
     'expired' => now()->gte($clubEvent->to)
]);

答案 1 :(得分:0)

您应该只能在模型上运行更新查询:

ClubEvent::whereRaw('to < NOW()')
    ->where('expired', false)
    ->update(['expired' => true]);

但是,如果您想要实际查找过去但尚未过期的事件,可以使用其他查询找到它们:

$events = ClubEvent::whereRaw('to < NOW()')
    ->where('expired', false)
    ->get();

这也可以在您的模型上创建为查询范围:

public function scopeIsPast($query)
{
    return $query->whereRaw('to < NOW()');
}

然后,您可以使用查询范围:

ClubEvent::isPast()->update(['expired' => true]);