检查两列之间的时间范围laravel

12 浏览
0 Comments

检查两列之间的时间范围laravel

下面是迁移代码。我想实现一个条件,但我不知道如何检查start_time和end_time之间的时间范围。

Schema::create('settings', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->time('start_time');
    $table->time('end_time');
    $table->foreign('user_id')->references('id')->on('users');
    $table->timestamps();
});

以下是我尝试的代码。

$date = new DateTime("Asia/Karachi");
$date = $date->format('Y-m-d H:i:s');
$date = date('H:i:s',strtotime($date));
$users_with_crypto_only_sms_alert = User::whereNotNull('device_key')
    ->where('subscription_package', 'LIKE', '%Morpheus%')
    ->where('role', '=', 'user')
    ->where('sms_alerts', '=', 1)
    ->where('is_email', '=', 0)
    ->where('is_blocked', '=', 0)
    ->where('mobile_no', '!=', '')
    ->whereHas('setting', function ($q) use ($date) {
        $q->whereTime('start_time', '>=', $date);
        $q->whereTime('end_time', '<=', $date);
    })->pluck('device_key')->all();
dd($users_with_crypto_only_sms_alert);

0
0 Comments

问题出现的原因是在laravel中,时间字段start_time和end_time被读取为字符串,导致无法计算时间差或检查时间范围。解决方法是将start_time和end_time的字段类型更改为timestamp或datetime。

如果要使用datetime类型,可以参考以下答案:https://stackoverflow.com/a/39665726/3673225

如果要使用timestamp类型,可以参考以下答案:https://stackoverflow.com/a/2920518/3673225

通过将字段类型更改为timestamp或datetime,可以解决该问题。

0