传递给Illuminate \ Database \ Query \ Builder :: cleanBindings()的参数1必须为数组类型,给定字符串

时间:2020-07-09 07:30:33

标签: laravel cron taskscheduler

我正在编写一个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();

我已记录所有结果。这是日志文件的屏幕截图

enter image description here

1 个答案:

答案 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();