检查两列之间的时间范围laravel
检查两列之间的时间范围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);
问题出现的原因是在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,可以解决该问题。