我正在编写一个cron作业,该作业将每分钟运行一次,以在一定条件下(如果数据库中存储的时间少于开发中的当前时间,则向用户发送Firebase通知。在生产中,如果存储的时间等于当前时间) )。在cron job的handle函数中,我有以下代码
public function handle()
{
// get current time
$current_time = Carbon::now()->format('H:i:00');
// get all daily_checks's user_id where time matches current time
$matched_check_user_id = DailyCheck::where('time', '<', $current_time)->pluck('user_id')->toArray();
\Log::debug($matched_check_user_id);
\Log::debug(gettype($matched_check_user_id));
// get fcm_tokens of matched user_ids
$fcm_tokens = Device::whereIn('user_id', '=', $matched_check_user_id)->pluck('fcm_token')->toArray();
// send firebase notifications
\Log::debug($fcm_tokens);
}
请考虑两个表格。我比较发送通知的时间的 daily_checks 表和存储 fcm_token 的设备表。两者都有user_id作为外键。
首先,我从满足我的时间条件的 daily_checks 获取所有用户ID。
$matched_check_user_id = DailyCheck::where('time', '<', $current_time)->pluck('user_id')->toArray();
然后,我尝试在遇到错误的地方获取匹配的user_ids的Fcm_tokens
$fcm_tokens = Device::whereIn('user_id', '=', $matched_check_user_id)->pluck('fcm_token')->toArray();
我已记录所有结果。这是日志文件的屏幕截图
答案 0 :(得分:0)
这里有个问题:
$fcm_tokens = Device::whereIn('user_id', '=', $matched_check_user_id)->pluck('fcm_token')->toArray();
您必须将数组传递到whereIn;
$fcm_tokens = Device::whereIn('user_id',[])->pluck('fcm_token')->toArray();
或将其粘贴到以下位置:
$fcm_tokens = Device::where('user_id', $matched_check_user_id)->pluck('fcm_token')->toArray();