1390 Подготовленный оператор содержит слишком много заполнителей, используя Laravel 5.6 - PullRequest
0 голосов
/ 14 октября 2018

Получение следующей ошибки

SQLSTATE [HY000]: Общая ошибка: 1390 Подготовленный оператор содержит слишком много заполнителей

Мой запрос выполнен из-за данных втаблица недавно

SELECT
  *
FROM
  table
WHERE col1 = 'some-val'
  AND col2 NOT IN ('va1', 'val2', 80k values... )

Я использую Laravel 5.6

$data_will_be_skipped = OtherModel::select('code')
        ->where('col1', 0)
        ->orWhere('col2', 1)
        ->groupBy('col3')
        ->pluck('col3')->toArray();

$ data_will_be_skipped теперь составляет приблизительно 80k массивы

Model::where('col1', 'some-val')->whereNotIn('col2', $data_will_be_skipped)->get();

1 Ответ

0 голосов
/ 14 октября 2018

MySQL имеет ограничение в 65 535 параметров в подготовленных выражениях.

Вместо этого используйте подзапрос:

$data_will_be_skipped = OtherModel::select('col3')
    ->where('col1', 0)
    ->orWhere('col2', 1);
Model::where('col1', 'some-val')
    ->whereNotIn('col2', $data_will_be_skipped)
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...