Roy-Try-Catch
← Back to list

【Laravel】whereIn is slow or empty data

Roy • Updated 2026-10-15 14:52:34

A quick fix for Laravel’s slow whereIn

Laravel 使用 ORM 時常會用到 whereIn。最近遇到傳入的陣列太大,結果完全查不到資料。查了之後才發現,Eloquent 底層使用 PDO::prepare(),而資料庫(MySQL、MariaDB)有一個 in_predicate_conversion_threshold 參數,專門用來優化 IN() 子句。預設值是 1000,超過時查詢會被改寫成子查詢的形式。因此,IN 子句綁定超過 999 個項目時會出問題:資料庫會回傳 0 筆結果,而且不會報錯。

解決方式

改用 whereIntegerInRaw,確保陣列的值都是整數:

Entity::whereIntegerInRaw('id', $array)->get();

延伸閱讀

Comments

No comments yet.

請先登入