Аргумент 1, переданный в Illuminate \ Database \ Query \ Builder :: cleanBindings (), должен иметь тип массив, заданная строка - PullRequest
0 голосов
/ 09 июля 2020

Я пишу задание cron, которое будет запускаться каждую минуту для отправки уведомлений Firebase пользователям при условии (если время, хранящееся в базе данных, меньше текущего времени в разработке. В производстве, если сохраненное время равно текущему времени ). В функции дескриптора задания cron у меня есть следующий код

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 таблица, в которой я сравниваю время отправки уведомления, и таблицу devices , где у меня хранится fcm_token . Оба имеют user_id в качестве внешнего ключа.

Во-первых, я получаю все идентификаторы пользователей из daily_checks , где выполняется мое временное условие.

$matched_check_user_id = DailyCheck::where('time', '<', $current_time)->pluck('user_id')->toArray();

Затем я пытаюсь получить Fcm_tokens совпадающих идентификаторов_пользователей, где я обнаружил ошибку

$fcm_tokens = Device::whereIn('user_id', '=', $matched_check_user_id)->pluck('fcm_token')->toArray();

Я зарегистрировал все результаты. Вот скриншот файла журнала

введите описание изображения здесь

1 Ответ

0 голосов
/ 09 июля 2020

Здесь есть проблема:

$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();

или передать его как where:

 $fcm_tokens = Device::where('user_id', $matched_check_user_id)->pluck('fcm_token')->toArray();
...